2013-08-27 122 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