zoukankan      html  css  js  c++  java
  • angularjs中控制器之间的通信----$on、$emit和$broadcast解析

    $on、$emit和$broadcast使得event、data在controller之间的传递变的简单。

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

    例如:

    <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>
    

      

    app.controller('SelfCtrl', function($scope) {
        $scope.click = function () {
    $scope.$broadcast('to-child', '我传给子控制器的数据'); $scope.$emit('to-parent', '我传给父控制器的数据'); } }); app.controller('ParentCtrl', function($scope) { $scope.$on('to-parent', function(event,data) { //监听to-parent 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  我传给父控制器的数据

    ChildCtrl     我传给子控制器的数据

    备注:当然service也可以在不同controller中通信

  • 相关阅读:
    动态规划-数字三角形V1
    二分-Aggressive cows
    Unity中的UGUI之UGUI的渲染顺序--01
    关于C#中委托的学习笔记
    Unity中的协程用法以及注意事项
    Unity中的单例方法2
    Unity中关于射线的运用——第03节 射线的实际运用
    Unity中关于射线的运用——第02节 圆形射线
    Unity中关于射线的运用——第01节 线段射线
    算法之折半查找
  • 原文地址:https://www.cnblogs.com/8080zh/p/9288015.html
Copyright © 2011-2022 走看看