簡體   English   中英

$ scope。$ $在$ rootScope之后沒有觸發。$在角度服務中廣播

[英]$scope.$on not triggering after $rootScope.$broadcast in angular service

這可能是重復的問題,但我發現這個問題的解決方法在我的情況下不起作用,這就是我發布問題的原因。

我有以下服務:

appRoot.service('MyService', function($rootScope) {
    var Messenger = {
        Temp: "",
        TempId:"",
        tempMethod: function(Id) {
            TempId = Id;
            $rootScope.$broadcast('FirstCtrlMethod');
        }
    };
    return Messenger ;
});

第二個控制器:

appRoot.controller('SecondCtrl', function ($scope, $location, MyResource, NotificationService, MyService) {
 $scope.invokeFirstCtrl= function() {
        var Id = '2';
        MyService.tempMethod(Id);
});

第一個控制器:

appRoot.controller('FirstCtrl', function ($scope, $compile, $filter, $modal, $sce, $location, NotificationService, MyService) {
$scope.$on('FirstCtrlMethod', function () {        
        alert('I am from frist controller');
    });
});

問題:“$ rootScope。$ broadcast('FirstCtrlMethod');” 正在按預期執行,但它不會導致在第一個控制器中觸發事件“$ scope。$ on('FirstCtrlMethod',function(){..” 。我在我的應用程序的許多地方使用了差異服務同樣的方式,他們工作得很好,我不明白為什么它不在這里工作。

把評論作為答案......

我猜想當你播放這個事件時,應該接收該事件的另一個控制器尚未實例化。

請嘗試實例化其他控制器

請參閱下面的工作示例

 var app = angular.module('app', []); app.service('MyService', function($rootScope) { var Messenger = { Temp: "", TempId: "", tempMethod: function(Id) { TempId = Id; $rootScope.$broadcast('FirstCtrlMethod'); } }; return Messenger; }); app.controller('homeCtrl', function($scope, MyService) { $scope.invokeFirstCtrl = function() { var Id = '2'; MyService.tempMethod(Id); }; }); app.controller('FirstCtrl', function($scope) { $scope.$on('FirstCtrlMethod', function() { alert('I am from frist controller'); }); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app"> <div ng-controller="homeCtrl"> <button ng-click="invokeFirstCtrl()">Invoke</button> </div> <div ng-controller="FirstCtrl"> </div> </div> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM