1 通过$broadcast或$emit在controller之间进行值传递,不过这些controller必须是子级或者父级关系,
2 $emit只能向父级parent controller传递事件event与数据data,$broadcast只能向子级child controller传递event与data,$on用于接收event与data.
3 <script>
4 var myapp=angular.module('myapp',[]);
5 myapp.controller('SelfCtrl', function($scope) {
6 $scope.click = function () {
7 $scope.$emit('to-parent', 'parent');
8 $scope.$broadcast('to-child', 'child');
9 }
10 });//在当前控制器内,分别给父级控制器和子级控制器传递事件和数据
11
12 myapp.controller('ParentCtrl', function($scope) {
13 $scope.$on('to-parent', function(d,data) {
14 console.log(data); //父级控制器内监听上面控制器中$emit注册的事件和传递的值
15 });
16 $scope.$on('to-child', function(d,data) {
17 console.log(data); //父级控制器内监听不到上面控制器中$broadcast注册的事件和传递的值,因为$broadcast注册的事件和传递的值是给子级的控制器的
18 });
19 });
20
21 myapp.controller('ChildCtrl', function($scope){
22 $scope.$on('to-child', function(d,data) {
23 console.log(data); //同理
24 });
25 $scope.$on('to-parent', function(d,data) {
26 console.log(data); //同理
27 });
28 });
29
30 myapp.controller('BroCtrl', function($scope){
31 $scope.$on('to-parent', function(d,data) {
32 console.log(data); //平级得不到值,因为$broadcast或$emit只能给子级或父级controller传递事件和值
33 });
34 $scope.$on('to-child', function(d,data) {
35 console.log(data); //同理
36 });
37 });
38
39 </script>
40
41 <body ng-app="myapp">
42 <div ng-controller="ParentCtrl"> //父级控制器
43 <div ng-controller="SelfCtrl"> //当前控制器
44 <a ng-click="click()">click me</a>
45 <div ng-controller="ChildCtrl"></div> //子级控制器
46 </div>
47
48 <div ng-controller="BroCtrl"></div> //平级控制器
49 </div>
50 </body>
51
52
53
原文:http://blog.51yip.com/jsjquery/1602.html