Angularjs 取消注册后重新注册$watch
我有一个日期变量的ng模型。在更改该变量时,我想进行一些验证,在这些验证过程中,我可能会更改起始变量本身,并且为了确保我不会获得无限监视触发器,我会在之前取消监视注册,并在验证完成后重新注册 重新注册不起作用。我做错了什么Angularjs 取消注册后重新注册$watch,angularjs,watch,Angularjs,Watch,我有一个日期变量的ng模型。在更改该变量时,我想进行一些验证,在这些验证过程中,我可能会更改起始变量本身,并且为了确保我不会获得无限监视触发器,我会在之前取消监视注册,并在验证完成后重新注册 重新注册不起作用。我做错了什么 var watchStartTime = $scope.$watch('timeSelection.startTime', function(newValue, oldValue) { if (newValue === oldValue) return; va
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();
}
我还尝试在重新注册时使用0设置超时,认为它可能有效,但没有
我知道timeSelection.startTime会发生变化,但$watch中的函数不会再次被调用
我遗漏了什么?如@Nikos Paraskevopoulos$watch所述,$watch返回注销fn。 我认为你应该做如下的事情
var register = function() {
var unregister = $scope.$watch('timeSelection.startTime', function(newVal, oldVal) {
if (newVal === oldVal) {
return;
}
unregister();
validateStartEndTime();
register();
}, true);
};
register();
换零钱怎么样?或者只需检查您的Form.yourDate.error是否不存在并显示视觉提示/禁用任何发送功能?我正在使用bootstrap的日期选择器,出于某种原因,ng更改从未触发,但我想这是另一个问题。另外,startTime可能会从控制器中的某个位置更改,而不仅仅是从Guit更改,$watch返回的函数只是一个注销函数。要再次注册,您必须再次使用相同的参数调用$watch。有趣的是,我可以将整个$watch块放入一个函数中,并随时调用它?