如果我在$ broadcast上更改变量,$ watch是否应该工作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果我在$ broadcast上更改变量,$ watch是否应该工作相关的知识,希望对你有一定的参考价值。

我从我的服务广播undo-redo-changed事件并在scope.on中处理但是$ watch funciton没有调用。为什么?使用$ watch是否正确?当drawModule服务属性变量改变时,这些代码的用途改变按钮状态。我的代码是

   $scope.$on('undo-redo-changed', function () {        
    $scope.canUndo = drawModule.canUndo() ? '' : 'disabled';
    $scope.canRedo = drawModule.canRedo() ? '' : 'disabled';        
}); 

$scope.$watch('canUndo', function(newValue, oldValue) {
    $scope.canUndo = newValue;
}, true);

$scope.$watch('canRedo', function (newValue, oldValue) {
    $scope.canRedo = newValue;
}, true);
答案

$watch参数被反转它是当前值和旧值。

使用:

$scope.$watch('canUndo', function(newValue, oldValue) {
    $scope.canUndo = newValue;
}, true);

另外,如果canUndo是简单值,则不需要将$watch的第三个参数设置为true(它用于监视数组和嵌套结构)。

以上是关于如果我在$ broadcast上更改变量,$ watch是否应该工作的主要内容,如果未能解决你的问题,请参考以下文章

Spark Broadcast总结

08共享变量(Broadcast Variable和Accumulator)

手动更改后角度不更新 $scope 变量

根据当前阶段更改变量

当我在 TabView 上快速滑动时如何更改变量

条件变量使用总结