2013-08-27 121 views
0

寻找一些最佳实践的帮助。AngularJS模块配置

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

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

token是一种价值,我必须$http.get()页面加载。

我INTIAL的想法是把这个在我的控制器,但经过考虑之后,它更多更有意义,这样做的模块配置在页面加载我在哪里设置我的自定义页眉:

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

我的问题是两部分:

  1. 这是最好的方法吗?
  2. 如果是这样,我该如何在模块配置中创建$http.get()请求?
+0

-1不是一个问题(请参阅:“我的问题是,该标记是一个值,我必须在页面加载$ http.get()”) – naomik

+0

请参阅下面的问题。请不要是个混蛋,它是一个真正的问题。 – wesbos

+0

我不是个混蛋。查看您的问题标题;也不是一个问题。 – naomik

回答

1

正如您可能已经注意到的,app.config不允许您使用$ http(或您自己创建的任何服务)之类的服务,它在定义之前运行。尝试拨打电话app.run。它是在配置之后,对使用服务没有任何限制。

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

一个更好的选择,也取决于用例,可能是在需要令牌的任何路由上使用解析函数。加载任何控制器和模板之前,路由将延迟,直到路由解析函数完成。使用这种方法,您可以100%确定令牌在控制器运行后就存在。

This video has a good intro to resolves.

他们还可以结合起来。在您的app.run中运行http-call,然后使用解析函数在控制器加载之前确保它存在。

+0

啊好吧,所以只是aw.run(功能($ http){... – wesbos

+0

非常感谢花时间来解释这一点,我真的很感激它:) – wesbos