$on、$emit和$broadcast使得event、data在controller之間的傳遞變的簡單。
$emit只能向parent controller傳遞event與data $broadcast只能向child controller傳遞event與data $on用於接收event與data
轉載:http://www.it165.net/pro/html/201404/12610.html
這個我測試了一下,只要$emit和$broadcast 發射,$on就可以立刻接受到的。
不過用的是$scope 發射和接受。
emit(name,data)向父control發射的。
而broadcast(name,data)是向子control發射的。
?不知道可以擴control想爸爸的爸爸發射呢,沒有試過
html的代碼
<div ng-controller="ParentCtrl"> <!--父級--> <div ng-controller="SelfCtrl"> <!--自己--> <a ng-click="click()">click me</a> <div ng-controller="ChildCtrl"></div> <!--子級--> </div> <div ng-controller="BroCtrl"></div> <!--平級--> </div><br>
js的代碼
1 app.controller('SelfCtrl', function($scope) { 2 $scope.click = function () { 3 $scope.$broadcast('to-child', 'child'); 4 $scope.$emit('to-parent', 'parent'); 5 } 6 }); 7 8 app.controller('ParentCtrl', function($scope) { 9 $scope.$on('to-parent', function(event,data) { 10 console.log('ParentCtrl', data); //父級能得到值 11 }); 12 $scope.$on('to-child', function(event,data) { 13 console.log('ParentCtrl', data); //子級得不到值 14 }); 15 }); 16 17 app.controller('ChildCtrl', function($scope){ 18 $scope.$on('to-child', function(event,data) { 19 console.log('ChildCtrl', data); //子級能得到值 20 }); 21 $scope.$on('to-parent', function(event,data) { 22 console.log('ChildCtrl', data); //父級得不到值 23 }); 24 }); 25 26 app.controller('BroCtrl', function($scope){ 27 $scope.$on('to-parent', function(event,data) { 28 console.log('BroCtrl', data); //平級得不到值 29 }); 30 $scope.$on('to-child', function(event,data) { 31 console.log('BroCtrl', data); //平級得不到值 32 }); 33 });
最終結果
ParentCtrl child
ChildCtrl parent
$emit和$broadcast可以傳多個參數,$on也可以接收多個參數。
在$on的方法中的event事件參數,其對象的屬性和方法如下