我的AngularJS 1.3中有以下手表。应用程序:
$scope.$watch('vm.reportInstitution', function(newValue, oldValue) {
if(oldValue != newValue) {
userService.getAllUsersOfInstitutionByInstitutionId(vm.reportInstitution.id).then(function successCallback(response) {
vm.optionsUser = response.data;
vm.reportUser = vm.optionsUser.length > 0 ? vm.optionsUser[0] : null;
}, function errorCallback(response) {
console.log('error in recordReport.controller.js#watch#reportInstitution');
});
}
});
$scope.$watch('vm.reportUser', function(newValue, oldValue) {
if(oldValue != newValue) {
userService.getInstitutionsOfUser(vm.reportUser.id).then(function successCallback(response) {
vm.optionsInstitution = response.data;
vm.reportInstitution = vm.optionsInstitution.length > 0 ? vm.optionsInstitution[0] : null;
}, function errorCallback(response) {
console.log('error in recordReport.controller.js#watch#reportUser');
});
}
});
所以,相互影响,例如如果vm.reportInstitution更改而不是vm.reportUser设置且vm.reportUser更改,则设置vm.reportInstitution - >这会产生无限循环。
我现在的问题是,如果我可以通过停止类似的传播来阻止这种情况吗?
答案 0 :(得分:0)
您可以使用var stopwatchreportInstitution = null ;
var stopwatchreportUser = null ;
function startwatchreportInstitution(){
stopwatchreportInstitution = $scope.$watch('vm.reportInstitution', function(newValue, oldValue) {
if(oldValue != newValue) {
userService.getAllUsersOfInstitutionByInstitutionId(vm.reportInstitution.id).then(function successCallback(response) {
vm.optionsUser = response.data;
// STOP the other watch
if (stopwatchreportUser != null) {
stopwatchreportUser();// arrete le watcher
stopwatchreportUser = null;
}
vm.reportUser = vm.optionsUser.length > 0 ? vm.optionsUser[0] : null;
}, function errorCallback(response) {
console.log('error in recordReport.controller.js#watch#reportInstitution');
});
}
});
}
startwatchreportInstitution() ;
function startwatchreportUser(){
stopwatchreportUser = $scope.$watch('vm.reportUser', function(newValue, oldValue) {
if(oldValue != newValue) {
userService.getInstitutionsOfUser(vm.reportUser.id).then(function successCallback(response) {
vm.optionsInstitution = response.data;
// STOP the other watch
if (stopwatchreportInstitution != null) {
stopwatchreportInstitution();// arrete le watcher
stopwatchreportInstitution = null;
}
vm.reportInstitution = vm.optionsInstitution.length > 0 ? vm.optionsInstitution[0] : null;
}, function errorCallback(response) {
console.log('error in recordReport.controller.js#watch#reportUser');
});
}
});
}
startwatchreportUser();
停止/启动观看流程,如下所示:
Spring MVC
编辑:查看官方文档“返回此侦听器的注销功能”。 https://docs.angularjs.org/api/ng/type/ $ rootScope.Scope