$ scope.$ $在$ rootScope之后没有触发.$在角度服务中广播

Sau*_*kar 13 javascript angularjs

这可能是重复的问题,但我发现这个问题的解决方法在我的情况下不起作用,这就是我发布问题的原因.

我有以下服务:

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

第二个控制器:

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

第一个控制器:

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

问题:"$ rootScope.$ broadcast('FirstCtrlMethod');" 正在按预期执行,但它不会导致在第一个控制器中触发事件"$ scope.$ on('FirstCtrlMethod',function(){..".我在我的应用程序的许多地方使用了差异服务同样的方式,他们工作得很好,我不明白为什么它不在这里工作.

har*_*shr 14

把评论作为答案......

我猜想当你播放这个事件时,应该接收该事件的另一个控制器尚未实例化.

请尝试实例化其他控制器

  • 如何实现该控制器? (5认同)