注销后重新注册 $watch
Re-registering $watch after de-registering
我在日期变量上有 ng-model。在更改该变量时,我想进行一些验证,在这些验证期间,我可能会更改 start 变量本身,并确保我没有得到无限观察触发器,我之前注销了手表,然后重新 -验证完成后注册它。
重新注册无效。我做错了什么?
var watchStartTime = $scope.$watch('timeSelection.startTime', function(newValue, oldValue) {
if (newValue === oldValue) return;
validateStartEndTime();
}, true);
function validateStartEndTime() {
// De-register watch
watchStartTime();
// Do some stuff that might change timeSelection.startTime
// Re-register watch
watchStartTime();
}
我在重新注册时也试过setTimeout为0,以为可以,但是不行。
timeSelection.startTime
发生了变化(我知道它确实发生了变化)但是 $watch 中的函数不会再次被调用。
我错过了什么?
正如@Nikos Paraskevopoulos 所述$watch
returns 注销 fn。
我认为您应该执行以下操作...
var register = function() {
var unregister = $scope.$watch('timeSelection.startTime', function(newVal, oldVal) {
if (newVal === oldVal) {
return;
}
unregister();
validateStartEndTime();
register();
}, true);
};
register();
我在日期变量上有 ng-model。在更改该变量时,我想进行一些验证,在这些验证期间,我可能会更改 start 变量本身,并确保我没有得到无限观察触发器,我之前注销了手表,然后重新 -验证完成后注册它。
重新注册无效。我做错了什么?
var watchStartTime = $scope.$watch('timeSelection.startTime', function(newValue, oldValue) {
if (newValue === oldValue) return;
validateStartEndTime();
}, true);
function validateStartEndTime() {
// De-register watch
watchStartTime();
// Do some stuff that might change timeSelection.startTime
// Re-register watch
watchStartTime();
}
我在重新注册时也试过setTimeout为0,以为可以,但是不行。
timeSelection.startTime
发生了变化(我知道它确实发生了变化)但是 $watch 中的函数不会再次被调用。
我错过了什么?
正如@Nikos Paraskevopoulos 所述$watch
returns 注销 fn。
我认为您应该执行以下操作...
var register = function() {
var unregister = $scope.$watch('timeSelection.startTime', function(newVal, oldVal) {
if (newVal === oldVal) {
return;
}
unregister();
validateStartEndTime();
register();
}, true);
};
register();