[英]Fetch server settings after boostrap but before anything else
我一直在尋找答案,但是對於如何解決和實現這一目標並沒有任何明確或明確的答案。
在我的anguarJS應用中,我想確保AngularJS加載/引導后的第一件事是通過$http
到達服務器並獲取一些設置(通過api: /api/settings/get
)-取決於在子域上和/或如果有JWT或其他用戶會話,它將檢索一些設置數據,這些數據應添加到$rootScope
。
我的問題是,我無法“停止”該應用程序,僅當已獲取設置並填充$rootScope
時,才能繼續其日常生活。 如果獲取或設置調用可能會失敗,則應用程序應“停止”-因此至關重要的是,必須盡早加載這些設置,以便我知道所有內容(服務,控制器,指令等)都可以訪問它們。
我已經嘗試過$broadcast
事件,並以角度將其放入我的.run
函數中,但它似乎仍可以解析該應用程序(也許顯然是因為它是異步的)。
apiConnector.get('api/settings/get').then(function(settings) {
$rootScope.settings = settings;
$rootScope.$broadcast('settings-fetched');
});
但是,我不喜歡這種方法,並且要求我到處收聽此事件。
我的路線既是公共路線又是受限路線。
我希望有人能在正確的方向幫助我,以解決該問題。
由於您使用的是ui-router,因此建議您在進入默認狀態之前使用resolve: https : //github.com/angular-ui/ui-router/wiki#resolve
ui-router文檔中的示例路由配置:
$stateProvider.state('myState', {
resolve:{
// Example using function with returned promise.
// This is the typical use case of resolve.
// You need to inject any services that you are
// using, e.g. apiConnector in this example
settingsObj: function(apiConnector){
return apiConnector.get('api/settings/get');
}
}
如果此操作失敗,則可以使用.then()
將用戶重定向到遠離應用或w / e的位置,以解決此問題。 和通常的承諾一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.