强制 $scope.$watch 只开火一次

Forcing $scope.$watch to only fire once

本文关键字:一次 开火 scope watch 强制      更新时间:2023-09-26
$scope.$watch('text', function () {
    $scope.obj = new Text($scope.text);
    console.log('Hi!');
});
// Hi!
// Hi!

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

编辑:

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

$scope.$watch(..)返回一个取消绑定函数,因此请执行以下操作:

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

这将导致它触发,并在发射一次后自行解绑。

编辑:

仅值更改:

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