Как обойти этот бесконечный цикл $ watch? - PullRequest
0 голосов
/ 17 января 2019

В моем файле angularJs у меня есть часы, установленные для переменной, которая устанавливается моим md-select

<md-select ng-model="NC.common.commonType" ng-model-options="{trackBy: '$value.id'}" flex="25" placeholder="Common Type" ng-disabled="!NC.isEdit()">

В моем контроллере:

scope.$watch('NC.common.commonType', function (new, old) {
        modal.launchModal('Common type changed', '<p>Are you sure?</p>')
        .then((result) => {
            if (!result) {
                vm.module.placementType = angular.copy(oldValue);
        });
    }, true);

Поэтому, когда они выбираютдругой вариант;это вызывает модальное.Этот модал спрашивает вас, уверены ли вы, что хотите изменить модал.Если вы говорите «нет», я возвращаю наблюдаемую переменную к старому значению;и игнорировать новое значение.Это запускает бесконечный цикл $ watch.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Вот как это выглядит с ng-change

<md-select ng-model="NC.common.commonType" ng-value="NC.common.commonType" ng-change="CC.onChange(NC.common.commonType,'{{NC.common.commonType}}')">

        vm.onChange = function(newValue, oldValue) {
        modal.launchModal('Placement type changed', '<p>Are you sure?</p>')
        .then((result) => {
            if (!result) {
                vm.module.placementType = angular.copy(oldValue);

            } 
        });
    };

Это работает без бесконечного цикла

0 голосов
/ 17 января 2019

Возможно, есть способ сделать это, изменив способ фактического обновления модели; однако, кроме возможности найти способ зарегистрировать / отменить регистрацию часов в операторе if; это может быть не очень хорошая идея.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...