angularjs $boadcast 和 $on 从 angular.injector 起不起作用

angularjs $boadcast and $on doesn´t work from angular.injector

我正在尝试在收到推送通知时将函数调用到控制器中,传递给 $broadcast / factory,但是在 angular.injector 调用时广播不起作用,这里是和平我的代码:

push.js </p> <pre><code>window.onNotification = function(data) { angular.injector(['ng', 'myApp']).get("laFactory").PushReceived(data.additionalData); // --> work fine }; window.push = PushNotification.init({ "android": { "senderID": "123456789", "icon": "system", "forceShow": true } }); window.push.on('notification', window.onNotification);

laFactory.js </p> <pre><code>.factory('laFactory', ['$http', '$rootScope', function ($http, $rootScope) { var laFactory = {}; laFactory.PushReceived = function(data) { $rootScope.$broadcast('handleNotify', {}); // --> don´t work when called by angular.injector!!! why not?! }; $rootScope.$broadcast('handleNotify', {}); // this work fine return laFactory; }

myController.js </p> <pre><code>.controller('NotificacoesController', function($scope, $rootScope, laFactory) { var handler = $scope.$on('handleNotify', function () { alert('broadcast - on'); });

}

不清楚您为什么要尝试以这种方式获得服务?

很确定你使用的语法是创建一个新的注入器,如果你想获得现有的注入器,那么你可以使用类似的东西:

angular.element(document).injector()

我仍然想知道为什么你不正常地注入服务。 https://docs.angularjs.org/api/ng/function/angular.injector


啊,我现在明白你正试图在 angular 上下文之外获取它...上面的代码片段可以工作,但你认为通常最好将通知代码包装在服务中而不是尝试使用 angular 之外的东西 angular 带来其他东西 "into the fold" 或搜索现有的模块来为你完成这项工作。

不确定它是否最好,但它有效:

angular.element(document).injector().invoke(["laFactory", function(laF) {
  laF.PushReceived({});
}]);

http://plnkr.co/edit/uVHZKxUjRErbxt2dR3lw?p=preview