我无法在提供者内部访问$ rootScope。我看了很多有角度的其他模块实现。它与我的实施方式相同。 怎么了? 它尝试将urload作为一个单独的函数(类似于其他getValue函数)它不起作用
错误是$ emit未定义
define(['angularAMD'], function () {
var contextServiceModule = angular.module('contextService', []);
var contextService = function () {
var context = {};
this.$get = ['$rootScope', function ($rootScope) {
console.log($rootScope);
return function (){
return {
init: init,
getValue: getValue,
setValue: setValue,
urlLoad: function () {
$rootScope.$emit('onInit', {});/// error here
}
};
};
}];
this.init = function () {
return context;
};
this.getValue = function (key) {
var value = context[key] ? context[key] : null;
return value;
};
this.setValue = function (key, value) {
context[key] = value;
};
}
contextServiceModule.provider('contextService', contextService);
});
答案 0 :(得分:6)
您无法将$ rootScope注入提供者$ get函数,因为它尚不可用。但是,您可以在调用函数时手动注入它。
this.$get = ['$injector', function ($injector) {
return function (){
return {
init: init,
getValue: getValue,
setValue: setValue,
urlLoad: function () {
var $rootScope = $injector.get('$rootScope');
console.log($rootScope);
$rootScope.$emit('onInit', {});/// error here
}
};
};
}];
答案 1 :(得分:1)
在配置阶段创建角度提供程序,并且在应用程序运行阶段之前$ rootScope不可用。这里有几个Angular资源和一个类似的问题:
https://docs.angularjs.org/guide/module
答案 2 :(得分:1)
这就是我如何让$ rootScope广播从React.js
到Angular
的消息。
如果您的ng-view
不在身体中,请使用您的function $broadcast(event, args]) {
angular.element('body').injector().invoke([
'$rootScope',
'$timeout',
($rootScope, $timeout) =>
{
args.unshift(event);
$timeout(() => {
$rootScope.$broadcast.apply($rootScope, args);
});
}
]);
。
Something: different
Date: 22:23:32
}
从这里得到它: https://www.bimeanalytics.com/engineering-blog/you-put-your-react-into-my-angular/
答案 3 :(得分:0)
!!重要提示:以下解决方案在缩小后无法正常工作。为此,您需要进行依赖注入,但是不能在配置阶段调用$ get
app.provider('someHandler', function() {
this.$get = function ($rootScope) {
function doBroadcast(words) {
$rootScope.$broadcast(words);
}
return {
shout: function (words) {
doBroadcast(words);
}
}
}
});
如果您需要在 config阶段中使用,则可以执行以下操作
app.config(['someHandlerProvider', function(someHandlerProvider) {
someHandlerProvider.$get().shout('listen up');
}
在运行过程中,您只需someHandler.shout('listen up')