【发布时间】:2013-03-01 10:28:27
【问题描述】:
AngularJS 有一个基于 DOM 的控制器继承,如 Angular 文档中所述。
<div ng-controller="BaseController">
<p>Base Controller Value: {{value}}</p>
<button ng-click="updateValue()">Update In Base</button>
<div ng-controller="DerivedController">
<p>Derived Controller Value: {{value}}</p>
<button ng-click="updateValue()">Update In Derived</button>
</div>
</div>
范围变量“value”仅存在于 BaseController 中。基于此,在更改 BaseController 或 DerivedController 中的方法的值时,我希望这两个值都需要更新。但只有单个作用域变量得到更新。
这是一个演示相同示例的小提琴:http://jsfiddle.net/6df6S/1/
如何在一个级别进行更改以传播到当前范围的直接子级和直接父级。
我们可以通过使用
来实现$scope.$watch
有没有办法在不使用它或任何此类观察者的情况下做到这一点?
编辑 1:
这里使用 $scope.$watch 就是我的意思
$scope.$watch("value", function () {
$scope.$broadcast("childChangeListener"); //Downwards to all children scopes
$scope.$emit("parentChangeListener"); //Upwards to all parent scopes
});
我一直在寻找在不使用这种机制的情况下在所有范围内更新值的方法。
【问题讨论】:
-
请使用$rootScope
-
有没有办法共享$scope而不用把属性和方法放到$rootScope中?
-
请不要使用 $rootScope。改用服务在控制器之间共享数据(请参阅我的回答)。
-
有什么特别的理由选择服务而不是
$rootscope? -
@AdityaPonkshe,使用
$rootScope类似于全局变量,即usually bad。