angular中$emit与$broadcast详解

来源:互联网 发布:我的世界端口映射软件 编辑:程序博客网 时间:2024/06/06 00:03

angularjs 中 broadcastemit $on的处理思想

  • 对于Angular的controll之间的通信方式,我们可以常见有有几种方式,如可以通过rootScopescope的作用域,当然还有一种个人觉得很好的通信方式就是broadcast,emit,$on来监听;

  • broadcastemit方式的区别 
    broadcast广controlleremit与$broadcast方式相反,是子级controller发布一个消息事件,父级controller监听的函数执行; 
    两种方式平级的controller都不能收到消息事件,注意同一个controller里面都是可以捕获到消息事件的; 
    父子级controller

<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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

javascript如下:

    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);        //平级得不到值      });  });  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

同一个controller里面

    <div ng-controller="Ctrl">        <h1>{{message1}}</h1>        <h2>{{message2}}</h2>    </div>
  • 1
  • 2
  • 3
  • 4

js代码:

    angular.module('app', [])        .controller('Ctrl', ['$scope', function($scope) {            $scope.$on('msg1', function(e, msg) {                $scope.message1 = msg;            });            $scope.$on('msg2', function(e, msg) {                $scope.message2 = msg;            });            $scope.$emit('msg1', 'Hello Angular!');            $scope.$broadcast('msg2', 'Angular is magic!')        }]);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

注意: 
相比 emitbroadcast广播方法要消耗更多的资源,因为广播事件会深入到该作用域的所有子孙作用域,跟单路径冒泡的emitbroadcast方法

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃肉老是塞牙缝怎么办 宝宝光喝奶粉不吃饭怎么办 九个月宝宝缺维c怎么办 九个月宝宝缺维d怎么办 9个月大宝宝缺锌怎么办 三周岁宝宝不爱吃饭怎么办 一周岁宝宝不爱吃饭怎么办 两岁半宝宝不自己吃饭怎么办 3岁宝宝不会吃饭怎么办 节食减肥胃疼怎么办呢 减肥不吃饭胃疼怎么办 过度节食伤了胃怎么办 3岁宝宝啥也不吃怎么办 1岁多宝宝不吃饭怎么办 胃口吃辣的难受怎么办 空腹吃辣椒胃疼怎么办 吃东西辣的胃口疼怎么办 吃辣的东西胃烧怎么办 吃母乳的宝宝不爱喝水怎么办 三个月宝宝不肯吃奶粉怎么办 三个月宝宝不肯喝奶粉怎么办 三个月的宝宝不肯喝奶粉怎么办 三个月的宝宝不肯吃奶粉怎么办 饿了还是没食欲怎么办 3岁半幼儿便秘怎么办 小孩字写得难看怎么办 小孩的字写的丑怎么办 小孩字写的太差怎么办 小孩很多字不会写怎么办 食欲不好吃不多怎么办 中班小孩子子不肯写字怎么办 1岁宝便秘该怎么办 两周的宝宝便秘怎么办 3岁宝宝不肯吃药怎么办 1岁婴儿不肯吃药怎么办 9月婴儿不肯吃药怎么办 半岁宝宝不吃药怎么办 1岁宝宝不爱吃药怎么办 2岁吃多了呕吐怎么办啊 小孩吃撑了吐怎么办 三岁宝宝吃太多怎么办