如何绕过这个$watch无限循环



在我的 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无限循环。

这就是 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);
            } 
        });
    };

这在没有无限循环的情况下工作

也许有一种方法可以通过更改实际更新模型的方式来做到这一点; 但是,除了可能找到一种在 if 语句中注册/注销监视的方法之外; 这可能不是一个好主意。

最新更新