0

在我的應用程序中,每個用戶都有一個特定的配置文件,我創建了一個服務來保存名爲currentUser的配置文件。在用戶登錄後獲取角度用戶配置文件

我使用此配置文件的屬性來渲染我的網站標題並進行進一步的api調用。

問題是我應該在什麼時候填寫這個currentProfile服務?

有幾個選項:

1 - 登錄後承諾解決:

authService.login(username, pass) 
    .then(function(response) { 
     userService.getProfile() 
      .then(function(profile){ 
       currentUser.setProfile(profile); 
       $state.go('dashboard'); 
      }); 
    }); 

這種方法的主要問題是,如果用戶在這個網址/main/list並刷新頁面, currentUser被清空。

2 - 使用UI路由器deferIntercepturlRouter.sync()$urlRouter.listen()here,但這種方法的主要問題是,我的頭指令和控制器被之前(或期間)執行的事件處理程序的$locationChangeStartcurrentUser尚未填補。

我該如何達到我所期望的效果?任何想法都會被接受!

編輯:我不想靠的localStorage或餅乾或....

+0

登錄後填入個人資料到的localStorage或餅乾,把它抓回來後刷新。清除它註銷 –

+0

@SaneeshB我不想使用這些存儲。 – Rachmaninoff

回答

1

使用ui路由器,它保證了應用程序繼續之前的數據加載一個resolve屬性。

$stateProvider 
 
     .state('main.list', { 
 
      url: "/main/list", 
 
      templateUrl: "views/custom/index.html", 
 
      controller:MainController, 
 
      resolve: { 
 
       loginUser : function($q){ 
 
        //load data or whatever 
 
        return loadData(); 
 
       } 
 
      } 
 
     })

+0

你說什麼意味着我應該爲每個應用程序狀態添加一個額外的解析屬性,糾正我,如果我錯了。但'currentUser'的性質與解析屬性不同。這是一項全球服務,可以在我的應用程序的每個地方使用,並且在每個使用案例中都應該填充。僅當您必須填充當前用戶時,才需要解決方案 – Rachmaninoff

+1

。您不必將其添加到所有狀態都有一個抽象狀態,然後將其添加到該狀態,以便它下面的所有孩子將繼承相同的決心。當前用戶作爲全球服務與此無關。您希望在用戶點擊特定網址或其他任何條件時填寫服務,此服務也可以從應用中的任何其他位置填充。 –

+0

謝謝你,看來你的解決方案工作得很好,'$ q'的用途是什麼?在我看來,這是多餘的。 – Rachmaninoff

相關問題