2014-04-10 30 views
2

非常匆忙的问题,对不起!在AngularJS服务中存储常量?

我知道如何保存常量在服务与AngularJS,例如:

.value('baseUrl', 'http://127.0.0.1:8001/api/v1/') 

但我怎么能创建使用另一个彼此不变? 似乎没有数值的DI?!?

例如,如果我想创建一个GetUsersUrl这是baseUrl字符串+“用户/”(串联)

我想这是简单...但无法找到如何做到这一点。 谢谢。

回答

3

您可以将值存储在服务中,将其配置到运行阶段,然后再访问这些值。例如:

.factory('UrlService', function() { 
    var UrlService = {}; 

    UrlService.baseUrl = undefined; // you can set a default value 
    UrlService.getUsersUrl = function() { 
    if (UrlService.baseUrl === undefined) { 
     return undefined; 
    } else { 
     return UrlService.baseUrl + '/Users/'; 
    } 
    }; 

    return UrlService; 
}); 

运行阶段发生在配置后。

.run(function(UrlService) { 
    UrlService.baseUrl = 'localhost:8001/api/v1'; 
}); 

然后,在你的控制器等你可以注入UrlService做

UrlService.getUsersUrl() 

编辑:重写了答案。

编辑2:另一种方法。

在我看来,你只是真的需要baseUrl是一个常数。所以,你可以这样做:

.value('baseUrl', 'localhost:1337') 
.factory('urlService', ['baseUrl', function(baseUrl) { 
    return { 
    getUsersUrl: function() { return baseUrl + '/users/'; }, 
    // OR 
    usersUrl: baseUrl + '/users/' // it can also be a primitive value 
    } 
}]); 

这种方法适用(并且是多“的角路”),如果你不需要实际配置的baseUrl。例如,如果您可以根据运行哪个环境(开发,生产等)来填写baseUrl的相应值,则无需对其进行配置。或者,如果该值是恒定的。

+0

非常感谢,正是我需要的! –