2

我一直在尋找這個答案,但沒有得到任何明確或明確的答案如何解決和實現這一點。獲取服務器設置後,推波助瀾,但在任何其他

在我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'); 
}); 

但是,我不喜歡這種方法,並要求我到處聽這個事件。

我的路線既公開又受限制。

我希望有人能幫助我以正確的方向解決問題。

+0

你是否有機會在你的應用中使用ui-router?如果這樣解決可能是一個好的解決方案。 –

+0

嗨艾瑞克,我忘了那個細節。是的,我在我的項目中使用了ui.router。 我該如何解決這個問題?前段時間我一直在嘗試,但沒有運氣 – Mestika

回答

0

由於您使用的話,建議用決心進入默認狀態之前UI路由器:從UI路由器文檔https://github.com/angular-ui/ui-router/wiki#resolve

實例路由配置:

$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'); 
     } 
} 

如果GET失敗,您可通過使用.then()將用戶從應用程序或w/e中重定向來解決此問題。與通常的角度承諾一樣。

相關問題