AngularJS模块配置

时间:2013-08-27 14:44:25

标签: javascript angularjs module

寻求最佳实践方面的帮助。

我有一个模块,我正在设置一些自定义标头。没什么大不了的:

  $httpProvider.defaults.headers.common['token'] = function() {
    return token;
  };

token是我在页面加载时必须$http.get()的值。

我的初衷是将它放在我的控制器中,但在考虑之后,在我正在设置自定义标题的页面加载模块配置中更有意义:

var app = angular.module('app',['ngRoute', 'ngResource'],function($httpProvider) {
   // Custom headers
});

我的问题是两部分:

  1. 这是最好的方法吗?
  2. 如果是,如何在模块配置中发出$http.get()请求?

1 个答案:

答案 0 :(得分:1)

正如您可能已经注意到的那样,app.config不允许您使用$ http(或您自己制作的任何服务)等服务,它会在定义之前运行。请尝试将呼叫置于 app.run 中。它是在配置之后,它没有使用服务的限制。

如果是正确的方法,则更难回答,因为它取决于确切的用例。由于$ http-calls是异步的,你不能只在应用程序启动时调用你的后端,并确保你的控制器或服务中存在令牌,http调用可能还没有返回!如果您希望立即使用该令牌,这可能会给您带来麻烦。

同样取决于用例的更好选择可能是在需要令牌的任何路由上使用resolve-function。在路由解析功能完成之前,路由将在加载任何控制器和模板时保持不变。使用此方法,您可以100%确定控制器运行后令牌是否存在。

This video has a good intro to resolves.

他们也可以合并。在app.run中运行http-call,然后使用resolve函数确保它在控制器加载之前存在。