强制$ scope。$ watch只能触发一次

时间:2015-04-04 02:08:02

标签: javascript angularjs

$scope.$watch('text', function () {
    $scope.obj = new Text($scope.text);
    console.log('Hi!');
});

// Hi!
// Hi!

如何防止此$ watch多次触发?我在上面的代码段之前的任何时候都没有定义或更改$scope.text。我试图测试newValue !== oldValue,但这没有改变任何东西。

修改

我已将问题缩小到指令问题。正在监视的输入框位于自定义指令中,由于某种原因,多次影响输入框的ng-model

1 个答案:

答案 0 :(得分:6)

$scope.$watch(..)返回一个unbind函数,所以这样做:

var unbind = $scope.$watch('text', function () {
    $scope.obj = new Text($scope.text);
    console.log('Hi!');
    unbind();
});

这将导致它射击,并在射击一次后解除绑定。

编辑:

仅适用于valueChanges:

$scope.$watch('text', function (nv, ov) {
     if (ov != nv) {
        $scope.obj = new Text($scope.text);
        console.log('Hi!');
     }
    });