在$ watch函数中清除范围变量?

时间:2015-07-28 07:53:23

标签: javascript angularjs angularjs-scope

我想在$scope variable函数中清除$watch。但它不起作用。我该如何实现这个呢?

    $scope.$watch('selectedEmployee', function (value) {
     //do some stuffs
     -------
     -------
     -------   
     $scope.selectedEmployee ={};//clearing variable
}

此代码无效。

1 个答案:

答案 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
     }     
 }