我有这样的Angular服务:
angular.module('MyModule') .factory('SharedData',function( ){ return { session_id: undefined,getSessionId: function () { return this.session_id; },setSessionId: function (new_id) { this.session_id = new_id; },}; }). controller( 'MyController',['SharedData',function( SharedData ){ console.log( "Retrieved session id = " + SharedData.getSessionId()); // getting undefined here! }]);
我之前在另一个模块中调用了这个服务,如下所示:
angular.module( 'bootstrapper' ) factory("AnotherService",function(){ var injector = angular.injector(['MyModule','ng']),shared_data = injector.get('SharedData'); shared_data.setSessionId( getUrlParameter('SESSIONID')); ... });
控制台输出结果未定义.
我认为’MyController’中的SharedData和’AnotherService’中的SharedData不是同一个对象.然而,人们都说Angular服务是单身人士.他们是真正的单身人士吗?
关于我的模块的更多细节:
我使用模块’bootstrapper’手动引导另一个模块’MyModule’:
angular.module( 'bootstrapper' ) .run(function () { angular.bootstrap(document,['MyModule']); });
解决方法
您可以在引导时为应用程序提供常量作为模块依赖项.
angular.module( 'bootstrapper' ) .config(function () { var sessionIdProvider = function ($provide) { $provide.constant("SESSIONID",getUrlParameter('SESSIONID')); }; angular.bootstrap(document,['MyModule',sessionIDProvider]); });
有关更多信息,请参阅AngularJS $provide Service API Reference — constant.
更新
您还可以跳过引导程序应用程序并在MyModule应用程序中使用配置块.
angular.module( 'MyModule' ) .config(function ($provide) { $provide.constant("SESSIONID",getUrlParameter('SESSIONID')); });
有关更多信息,请参阅AngularJS angular.module API Reference,