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({});
}]);
我正在尝试在收到推送通知时将函数调用到控制器中,传递给 $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({});
}]);