Maison  >  Article  >  interface Web  >  Transfert d'informations entre contrôleurs dans Angular (deuxième méthode) : $emit, $broadcast, $on

Transfert d'informations entre contrôleurs dans Angular (deuxième méthode) : $emit, $broadcast, $on

PHP中文网
PHP中文网original
2017-07-05 18:10:271027parcourir
    • $emit ne peut transmettre que des événements et des données au contrôleur parent ( $emit(name, args) )
    • $broadcast ne peut transmettre que des événements et des données au contrôleur enfant ($broadcast(name, args))
    • $on est utilisé pour recevoir des événements et des données ( $on(name, auditeur) )
    Transfert dinformations entre contrôleurs dans Angular (deuxième méthode) : $emit, $broadcast, $on
    <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>
    Transfert dinformations entre contrôleurs dans Angular (deuxième méthode) : $emit, $broadcast, $on

    JS :

    Transfert dinformations entre contrôleurs dans Angular (deuxième méthode) : $emit, $broadcast, $on
    var app = angular.module('myApp', []);
    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);         //平级得不到值
      });
    });
    Transfert dinformations entre contrôleurs dans Angular (deuxième méthode) : $emit, $broadcast, $on

    Cliquez pour exécuter le résultat :

    Contrôleur enfant ChildCtrl.
    ParentCtrl parent

    Le paramètre event dans la méthode $on, les propriétés et méthodes de son objet sont les suivantes

    事件属性 目的
    event.targetScope 发出或者传播原始事件的作用域
    event.currentScope 目前正在处理的事件的作用域
    event.name 事件名称
    event.stopPropagation() 一个防止事件进一步传播(冒泡/捕获)的函数(这只适用于使用`$emit`发出的事件)
    event.preventDefault() 这个方法实际上不会做什么事,但是会设置`defaultPrevented`为true。直到事件监听器的实现者采取行动之前它才会检查`defaultPrevented`的值。
    event.defaultPrevented 如果调用了`preventDefault`则为true
    Étiquette : Angularjs

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn