我想在$scope variable
函数中清除$watch
。但它不起作用。我该如何实现这个呢?
$scope.$watch('selectedEmployee', function (value) {
//do some stuffs
-------
-------
-------
$scope.selectedEmployee ={};//clearing variable
}
此代码无效。
答案 0 :(得分:0)
我同意一般意见,即观察变量,然后更改其自己的监视处理程序内部的变量很少是一个好主意。但是,可能会有一些不明确的用例,人们会想要这样做。
为了避免无限的摘要循环,您应该确保引用被保留并且稳定:
var empty = {};
$scope.$watch('selectedEmployee', function (value) {
if (value != empty) {
//do some stuffs
-------
-------
-------
$scope.selectedEmployee = empty;//clearing variable
}
}
这应该有效,因为当摘要循环运行时,该值将稳定为空引用。
但是,这种方法仍然存在问题 - 你应该有一个" dot"在您的范围模型中,以确保它解析为正确的参考。否则,当您使用赋值覆盖范围引用时,可以在直接范围上创建变量的副本,该副本是原始范围变量的副本。
这是一个改进的例子:
var empty = {};
$scope.my = { selectedEmployee = {} };
$scope.$watch('my.selectedEmployee', function (value) {
if (value != empty) {
//do some stuffs
-------
-------
-------
$scope.my.selectedEmployee = empty;//clearing variable
}
}