2016-09-20 62 views
-2

我很困惑。

首先,我观察这个在离子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

如果你已经解决了你的问题,请删除问题。如果不是,请重新回答你的问题,因为这没有意义。 – Nix

+0

这个问题应该如何重写?它实际上显示了我所观察到的。 – zeroflaw

+0

如果我们要帮忙,我们需要了解你在哪里设置'rootScope.strUrl ='http:// localhost:30000'。说它在'app.js'中根本没有帮助我们。 – Nix

回答

0

嗯...猜我知道出了什么问题。这是序列问题。

angularjs会经过我厂首先运行app.run(前[ '$ rootScope',...]

然而,执行console.log是一种误导。

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文档以获取更详细的说明。


至于你的“问题”,这取决于你在运行Access什么,你从你的myFactory回报你可能会遇到的问题。如果您的.run方法引入依赖于myFactory的依赖项,那么在注入myFactory的时候digest将没有时间完成。我不认为你拥有它的方式是理想的,在过去,我用constantsproviders来配置我的应用程序。我们有一个开源的图书馆,可以为你做你想做的事情。但文档是相当缺乏;)

https://bitbucket.org/unboxedtech/angular.core/src/e2b1b8dd9457de7b334655f09410da1a78fb55c8/app/src/urls/?at=master

基本上你定义一个设置对象:

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相关服务。