无论属性改变多少次,如何使每个摘要周期只运行一次观察者

时间:2015-05-21 21:28:32

标签: javascript angularjs angularjs-scope

我有一个函数$scope.render(),它使用值$scope.myProperty来渲染图表。如果myProperty在摘要周期中发生变化,我希望在摘要周期结束时调用$scope.render()每个摘要周期最多调用一次

$scope.$watch('myProperty', function(v, vold) {
    if ($scope.switch) {
        $scope.myProperty ++;
        $scope.switch = false;
    }

    $scope.render();
});

在这种情况下,如果$scope.switch,则$scope.render()将被调用两次。我怎么只能打电话一次?

1 个答案:

答案 0 :(得分:0)

解决方案是Angular的便捷$timeout服务。

var dirty = false;
$scope.$watch('myProperty', function(v, vold) {
    if ($scope.switch) {
        $scope.myProperty ++;
        $scope.switch = false;
    }

    dirty = true;

    $timeout(function() {
        if (dirty) {
            $scope.render();
            dirty = false;
        }
    });
});

现在,只要$scope.render发生更改,就会调用myProperty,无论多少次{@ 1}},它都会在摘要周期结束时被称为一次。 {1}}更改。