在AngularJS中存储服务中的常量?

时间:2014-04-10 14:22:15

标签: angularjs

很抱歉的问题,对不起!

我理解如何使用AngularJS在服务中存储常量,例如:

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

但是如何创建另一个使用另一个的常量呢? 似乎价值中没有DI?!?

例如,如果我想创建一个GetUsersUrl baseUrl字符串+'用户/'(连接)

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

1 个答案:

答案 0 :(得分: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;
});

运行阶段发生在config之后。

.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,这种方法可以工作(并且更像是“Angular方式”)。例如,如果您可以根据运行的环境(开发,生产等)填写baseUrl的相应值,则无需对其进行配置。或者,如果值是常数。