我熟悉以下实现控制器之间通信的方法。
还有其他吗?是否有更好的方法/最佳做法?
$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){..});
});
或者,从视图中:
<button ng-click="$broadcast('SomethingHappened', data)">Do Something</button>
好处:
缺点:
$rootScope
。<div ng-controller="Parent">
<div ng-controller="Child">
<div ng-controller="ChildOfChild">
<button ng-click="someParentFunctionInScope()">Do</button>
</div>
</div>
</div>
或者,在代码中
.controller("ChildOfChild", function($scope){
$scope.someParentFunctionInScope();
});
好处:
缺点:
$rootScope
。$watch
控制器只对作用域公开数据的变化做出反应,而不会调用函数。
.controller("Parent", function($scope){
$scope.VM = {a: "a", b: "b"};
$scope.$watch("VM.a", function(newVal, oldVal){
// react
});
}
好处:
ng-repeat
缺点:
$rootScope
我使用功能特定的共享服务在控制器之间进行通信。
您可以创建一个通用的共享服务来拥有一个订阅和广播事件的中心点,但是我发现随着时间的推移,特定于功能的服务更易于维护,尤其是随着项目和团队的成长。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句