zoukankan      html  css  js  c++  java
  • AngularJS的学习--$on、$emit和$broadcast的使用

    • $emit只能向parent controller传递event与data
    • $broadcast只能向child controller传递event与data
    • $on用于接收event与data

    例子如下

    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>

    js代码

    app.controller('SelfCtrl', function($scope) {
      $scope.click = function () {
        $scope.$broadcast('to-child', 'child');
        $scope.$emit('to-parent', 'parent');
      }
    });
    
    app.controller('ParentCtrl', function($scope) {
      $scope.$on('to-parent', function(event,data) {
        console.log('ParentCtrl', data);	   //父级能得到值
      });
      $scope.$on('to-child', function(event,data) {
        console.log('ParentCtrl', data);	   //子级得不到值
      });
    });
    
    app.controller('ChildCtrl', function($scope){
      $scope.$on('to-child', function(event,data) {
        console.log('ChildCtrl', data);		 //子级能得到值
      });
      $scope.$on('to-parent', function(event,data) {
        console.log('ChildCtrl', data);		 //父级得不到值
      });
    });
    
    app.controller('BroCtrl', function($scope){  
      $scope.$on('to-parent', function(event,data) {  
        console.log('BroCtrl', data);		  //平级得不到值  
      });  
      $scope.$on('to-child', function(event,data) {  
        console.log('BroCtrl', data);		  //平级得不到值  
      });  
    });

    最终结果

    ParentCtrl child

    ChildCtrl parent

    $emit和$broadcast可以传多个参数,$on也可以接收多个参数。

    在$on的方法中的event事件参数,其对象的属性和方法如下:

    事件属性目的
    event.targetScope 发出或者传播原始事件的作用域
    event.currentScope 目前正在处理的事件的作用域
    event.name 事件名称
    event.stopPropagation() 一个防止事件进一步传播(冒泡/捕获)的函数(这只适用于使用`$emit`发出的事件)
    event.preventDefault() 这个方法实际上不会做什么事,但是会设置`defaultPrevented`为true。直到事件监听器的实现者采取行动之前它才会检查`defaultPrevented`的值。
    event.defaultPrevented 如果调用了`preventDefault`则为true
  • 相关阅读:
    Fidder4 顶部提示 “The system proxy was changed,click to reenable fiddler capture”。
    redis 哨兵 sentinel master slave 连接建立过程
    虚拟点赞浏览功能的大数据量测试
    python基础练习题(题目 字母识词)
    python基础练习题(题目 回文数)
    python基础练习题(题目 递归求等差数列)
    python基础练习题(题目 递归输出)
    python基础练习题(题目 递归求阶乘)
    python基础练习题(题目 阶乘求和)
    python基础练习题(题目 斐波那契数列II)
  • 原文地址:https://www.cnblogs.com/xiaxianfei/p/5275710.html
Copyright © 2011-2022 走看看