在我的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无限循环。
答案 0 :(得分:1)
也许可以通过更改您实际更新模型的方式来做到这一点;但是,除了可能在if语句中找到注册/注销手表的方法外;这可能不是一个好主意。
答案 1 :(得分:1)
这就是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);
}
});
};
这在没有无限循环的情况下起作用