亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

$ON和$廣播(角)

$ON和$廣播(角)

蝴蝶刀刀 2019-07-11 15:11:29
$ON和$廣播(角)我有一個不同觀點的頁腳控制器和碼掃描控制器。angular.module('myApp').controller('footerController', ["$scope", function($scope) {}]);angular.module('myApp'). controller('codeScannerController', ["$scope", function($scope) {console.log("start");$scope.startScanner = function(){...當我單擊<li>在footer.html中,我應該在codeScanerController中獲取此事件。<li class="button" ng-click="startScanner()">3</li>我認為這是可以實現的$on和$broadcast,但我不知道怎么做,也不知道哪里都找不到例子。
查看完整描述

3 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

首先,對$on()$broadcast()$emit():

  • .$on(name, listener)

    -聆聽某一特定事件

    name

  • .$broadcast(name, args)

    -通過

    $scope

    在所有兒童中
  • .$emit(name, args)

    -向上發出一個事件

    $scope

    所有父級的層次結構,包括

    $rootScope

基于以下HTML(參見這里的完整示例):

<div ng-controller="Controller1">
    <button ng-click="broadcast()">Broadcast 1</button>
    <button ng-click="emit()">Emit 1</button></div><div ng-controller="Controller2">
    <button ng-click="broadcast()">Broadcast 2</button>
    <button ng-click="emit()">Emit 2</button>
    <div ng-controller="Controller3">
        <button ng-click="broadcast()">Broadcast 3</button>
        <button ng-click="emit()">Emit 3</button>
        <br>
        <button ng-click="broadcastRoot()">Broadcast Root</button>
        <button ng-click="emitRoot()">Emit Root</button>
    </div></div>

激發的事件將遍歷$scopes詳情如下:

  • 廣播1-只會被控制器1看到

    $scope

  • 發射1-將由控制器1看到

    $scope

    然后

    $rootScope

  • 廣播2-將由主計長2看到

    $scope

    然后控制器3

    $scope

  • 發射2-將由控制器2看到

    $scope

    然后

    $rootScope

  • 廣播3-只會被控制器3看到

    $scope

  • 發射3-將由控制器3看到

    $scope

    ,主計長2

    $scope

    然后

    $rootScope

  • 廣播根-將被看到

    $rootScope

    $scope

    所有控制器(1,2,然后3)
  • 發出根-將僅由

    $rootScope

觸發事件的JavaScript(同樣,您可以看到這里的工作示例):

app.controller('Controller1', ['$scope', '$rootScope', function($scope, $rootScope){
    $scope.broadcastAndEmit = function(){
        // This will be seen by Controller 1 $scope and all children $scopes 
        $scope.$broadcast('eventX', {data: '$scope.broadcast'});

        // Because this event is fired as an emit (goes up) on the $rootScope,
        // only the $rootScope will see it
        $rootScope.$emit('eventX', {data: '$rootScope.emit'});
    };
    $scope.emit = function(){
        // Controller 1 $scope, and all parent $scopes (including $rootScope) 
        // will see this event
        $scope.$emit('eventX', {data: '$scope.emit'});
    };

    $scope.$on('eventX', function(ev, args){
        console.log('eventX found on Controller1 $scope');
    });
    $rootScope.$on('eventX', function(ev, args){
        console.log('eventX found on $rootScope');
    });}]);


查看完整回答
反對 回復 2019-07-11
  • 3 回答
  • 0 關注
  • 504 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號