簡體   English   中英

在boostrap之后但在其他之前獲取服務器設置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM