我很困惑。
首先,我在Ionic 1+中观察到这一点(但我认为这可能与AngularJS有关)
我创建了一个工厂,注入了$ rootScope。
在我的app.js中,我已经分配了一个变量,说
var app = angular.module('my-module',
app.run(['$rootScope', ...
$rootScope.strUrl = 'http://localhost:30000'
然后我需要在工厂内使用这个变量。确切地说,在加载后立即访问它。
angular.module('my-module')
.factory('myFactory', ['$rootScope', ...]);
function myFactory($rootScope, ...){
var objUrl = {
baseUrl: $rootScope.strUrl,
....
}
}
让我感到困惑的是,当我在工厂内访问$ rootScope.strUrl时,它返回undefined。但是,在此之前只有一行,我能够console.log($rootScope.strUrl)
返回我想要的字符串。
是否无法访问工厂内的$ rootScope内容?
答案 0 :(得分:0)
angularjs会首先通过我的工厂([' $ rootScope',...]
然而,console.log有点误导。
答案 1 :(得分:0)
如果你的目标是设置“配置”,你有两个更好的选择。最简单的方法是使用constant
,value
(如果你的偏执狂)和provider
(如果你想要一个手提钻)。下面是一个如何使用常量的示例,该常量可供提供者和服务访问。提供程序更复杂,但如果您使用提供程序,则可以使用应用程序的config
步骤设置/配置它。
var app = angular.module('my-module', []);
app.constant('settings', {strUrl : 'http://localhost:30000'});
app.factory('myFactory', myFactory);
function myFactory(settings){
var objUrl = {
baseUrl: $settings.strUrl,
....
}
}
请参阅AngularJS文档以获取更详细的信息。
至于你的“问题”,取决于你在运行中访问的内容,以及你从myFactory返回的内容,你可能会遇到问题。如果你的.run
方法引入依赖于myFactory的依赖项,则digest
在注入myFactory时将没有时间完成。我不认为你拥有它的方式是理想的,过去我使用constants
和providers
来配置我的应用程序。我们有一个开源库,可以帮助您完成您的工作。但文档非常缺乏;)
基本上你定义了一个设置对象:
app.constant('settings', {
base: 'http://localhost:30000/'
});
在运行步骤中添加我们的UrlInterceptor
拦截器。
它允许你做以下事情:
$http('~/someresource')
// which translates to http://localhost:3000/someresource
$http('~(api)/someendpoint')
// which translates to http://localhost:3000/api/someendpoint
它也适用于模板和任何其他http
依赖服务。