Heim  >  Artikel  >  Web-Frontend  >  Informationsübertragung zwischen Controllern in Angular (zweite Methode): $emit, $broadcast, $on

Informationsübertragung zwischen Controllern in Angular (zweite Methode): $emit, $broadcast, $on

PHP中文网
PHP中文网Original
2017-07-05 18:10:271080Durchsuche
    • $emit kann Ereignisse und Daten nur an den übergeordneten Controller ( $emit(name, args) ) übergeben
    • $broadcast kann Ereignisse und Daten nur an den untergeordneten Controller ($broadcast(name, args)) weitergeben
    • $on wird zum Empfangen von Ereignissen und Daten ( $on(name, listener) )
    • verwendet
    Informationsübertragung zwischen Controllern in Angular (zweite Methode): $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>
    Informationsübertragung zwischen Controllern in Angular (zweite Methode): $emit, $broadcast, $on

    JS:

    Informationsübertragung zwischen Controllern in Angular (zweite Methode): $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);         //平级得不到值
      });
    });
    Informationsübertragung zwischen Controllern in Angular (zweite Methode): $emit, $broadcast, $on

    Klicken Sie, um das Ergebnis auszuführen:

    ChildCtrl untergeordneter Controller.
    ParentCtrl übergeordneter Controller

    Der Ereignisparameter in der $on-Methode, die Eigenschaften und Methoden seines Objekts sind wie folgt

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

Das obige ist der detaillierte Inhalt vonInformationsübertragung zwischen Controllern in Angular (zweite Methode): $emit, $broadcast, $on. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn