我正在使用AngularJS,我想观察变量是否更改,并减少另一个变量。这是我所拥有的:

$scope.$watch('watchMe', function () {
    $scope.decreaseMe--;
)


watchMe变量可用于所有范围。我只有一个控制器,其中既包含watchMe的更改功能,又包含watch的功能。

每次更改watchMe时Watch都会运行两次,并且我知道这是Angular的工作方式。但是,这意味着reduceMe将是错误的,因为它将减少两次。

我尝试过比较旧值和新值,但无法正常工作。

我正在输出旧的/新的/降低的值,这是当watchMe更改一次后得到的结果:

old: 7  new: 8
decreasing  5
old: 7  new: 8
decreasing  4


更改watchMe时仅减少一次我应该怎么做?



更新:

试图制作一个Plunkr来显示此内容,但在Plunkr中,$ watch仅触发一次。

最佳答案

这不行吗?

$scope.$watch('watchMe', function( newVal, oldVal ) {
    if( newVal != oldVal ) {
        $scope.decreaseMe--;
    }
});

10-06 15:06