angularjs $broadcast 和 $on 的使用及其注意事項

下面是demo:php

<div ng-controller="ParentCtrl"> www.111cn.net //父級 <div ng-controller="SelfCtrl"> //本身 <a ng-click="click()">click me</a> <div ng-controller="ChildCtrl"></div> //子級 </div> <div ng-controller="BroCtrl"></div> //平級 </div> phonecatControllers.controller('SelfCtrl', function($scope) { $scope.click = function () { $scope.$broadcast('to-child', 'child'); $scope.$emit('to-parent', 'parent'); } }); phonecatControllers.controller('ParentCtrl', function($scope) { $scope.$on('to-parent', function(event,data) { console.log(data); //父級能獲得值 }); $scope.$on('to-child', function(event,data) { console.log(data); //子級得不到值 }); }); phonecatControllers.controller('ChildCtrl', function($scope){ $scope.$on('to-child', function(event,data) { console.log(data); //子級能獲得值 }); $scope.$on('to-parent', function(event,data) { console.log(data); //父級得不到值 }); }); phonecatControllers.controller('BroCtrl', function($scope){ $scope.$on('to-parent', function(event,data) { console.log(data); //平級得不到值 }); $scope.$on('to-child', function(event,data) { console.log(data); //平級得不到值 }); });

以上是例子: 
值得注意的一些事情是,也是我本身遇到的,若是你要使用一個ctr1的兄弟ctr2 那麼會首先經過ctr1傳遞事件到父ctr,而後再由父ctr廣播到另外一個控制ctr2 中 這裏從ctr1到ctr 中的 
emit(ctr1event,ctr1);ctrctr2broadcast(‘ctrevent’,’ctr’); 兩個中的ctr1event和ctrevent不能同樣,同樣的話會致使事件廣播的無線循環,另外就是$on(‘dddd’,function(event,data){}); 記得不要少寫function中的參數的event或者data ,其實少寫是能夠運行的,可是會出問題,具體沒嘗試,也是本身遇到過的問題, 
就是以上這些了,但願對你有幫助
atom

相關文章
相關標籤/搜索