使用angularjs,發現controller間的值傳遞,比較麻煩的,以後幾篇文章會陸續說幾種方法。
一,angularjs $broadcast $emit $on的處理思想
在一個controller裡面通過事件觸發一個方法,在方法裡面通過$broadcast或$emit來定義一個變數,在父,子controller裡面通過$on來擷取。
二,執行個體說明angularjs $broadcast $emit $on的用法
1,html代碼
代碼如下 |
複製代碼 |
<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> |
2,js代碼
代碼如下 |
複製代碼 |
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(d,data) { console.log(data); //父級能得到值 }); $scope.$on('to-child', function(d,data) { console.log(data); //子級得不到值 }); }); phonecatControllers.controller('ChildCtrl', function($scope){ $scope.$on('to-child', function(d,data) { console.log(data); //子級能得到值 }); $scope.$on('to-parent', function(d,data) { console.log(data); //父級得不到值 }); }); phonecatControllers.controller('BroCtrl', function($scope){ $scope.$on('to-parent', function(d,data) { console.log(data); //平級得不到值 }); $scope.$on('to-child', function(d,data) { console.log(data); //平級得不到值 }); }); |
3,點擊Click me的輸出結果
1.child
2.parent
child
parent用$broadcast賦的值,只能子級得到值;$emit賦的值,只能父級得到;而平級的什麼都不能得到。