Использование $watchCollection для опеределения dirty/pristine статуса модели

Есть модель, которая загружается с сервера. Есть страница управления этой моделью. Хотелось бы включать кнопку «Save» только при «грязной» модели. Использовать возможности форм — не очень удобно так как есть инпуты, не связанные напрямую с моделью.

Так вот, если я использую $watchCollection таким образом
$scope.$watchCollection('ruleset.rules', function() {
                               $scope.rulesetChanged = true;
                        });
$scope.rulesetChanged = false;

возникает проблема первого сравнения: в первый раз в любом случае сравнивается пустой объект с заполненным.

Делать что-то вроде
var cases = 0;
$scope.$watchCollection('ruleset.rules', function() {
                             if (cases > 0) {    
                                 $scope.rulesetChanged = true;
                             }
                             cases ++;
                        });
$scope.rulesetChanged = false;


как-то очень не хочется. Может есть какой-то ангуляровский способ решения этой проблемы? Например как-то засетить старый объект?
  • Вопрос задан
  • 3000 просмотров
Решения вопроса 1
@kirksa Автор вопроса
решил проблему при помощи копирования исходной модели (angular.copy) и функции сравнения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
EugeneOZ
@EugeneOZ
Можно просто посмотреть, не undefined ли oldValue, которое передаётся в коллбэк.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы