注销后重新注册 $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();