New*_*Dev 9 angularjs angularjs-controller
我熟悉以下方法来实现控制器之间的通信.
还有其他人吗?有更好的方法/最佳实践吗?
$broadcast/$emit.controller("Parent", function($scope){
$scope.$broadcast("SomethingHappened", {..});
$scope.$on("SomethingElseHappened", function(e, d){..});
})
.controller("Child", functions($scope){
$scope.$broadcast("SomethingElseHappened", {..});
$scope.$on("SomethingHappened", function(e, d){..});
})
.controller("AnotherChild", functions($scope){
$scope.$on("SomethingHappened", function(e, d){..});
});
Run Code Online (Sandbox Code Playgroud)
或者,从视图:
<button ng-click="$broadcast('SomethingHappened', data)">Do Something</button>
Run Code Online (Sandbox Code Playgroud)
好处:
缺点:
$rootScope,使用<div ng-controller="Parent">
<div ng-controller="Child">
<div ng-controller="ChildOfChild">
<button ng-click="someParentFunctionInScope()">Do</button>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
或者,在代码中
.controller("ChildOfChild", function($scope){
$scope.someParentFunctionInScope();
});
Run Code Online (Sandbox Code Playgroud)
好处:
缺点:
$rootScope,使用$watch控制器仅响应范围暴露数据的变化,从不调用函数.
.controller("Parent", function($scope){
$scope.VM = {a: "a", b: "b"};
$scope.$watch("VM.a", function(newVal, oldVal){
// react
});
}
Run Code Online (Sandbox Code Playgroud)
好处:
ng-repeat缺点:
$rootScope正如Samuel所说,使用服务共享数据是一种推荐的方法.这个想法是无论任何控制器如何,数据的状态都是一致的.这两篇文章可以给你一个想法,"如何"和"为什么":共享数据控制器之间,angularjs控制器的状态.
我使用特定于功能的共享服务在控制器之间进行通信.
您可以创建一个通用的共享服务,使其具有订阅和广播事件的中心点,但我发现特定于功能的服务随着时间的推移更容易维护,尤其是在项目和团队增长时.
| 归档时间: |
|
| 查看次数: |
2395 次 |
| 最近记录: |