0

寻求最佳实践的帮助。

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

  $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()在模块配置中发出请求?
4

1 回答 1

1

app.config,您可能已经注意到,不允许您使用像 $http 之类的服务(或您自己创建的任何服务),它在定义之前运行。尝试将调用放在您的app.run中。它在配置之后,并且对使用服务没有任何限制。

它是否是正确的方法更难回答,因为它取决于确切的用例。由于 $http-calls 是异步的,您不能只在应用程序启动时调用后端并确保令牌存在于您的控制器或服务中,http 调用可能尚未返回!如果您希望立即使用令牌,这对您来说可能是个问题。

同样取决于用例,更好的选择可能是在需要令牌的任何路由上使用解析功能。路由将推迟加载任何控制器和模板,直到路由解析功能完成。使用此方法,您可以 100% 确定在控制器运行后令牌存在。

该视频有一个很好的解决方法介绍。

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

于 2013-08-27T15:00:13.647 回答