2015-08-21 76 views
0

我有一個Angular應用程序分爲多個小應用程序。該系統工作非常簡單:用戶登錄,然後他可以選擇他想要使用哪個子應用程序。

我想在標題中顯示應用程序的名稱。在.run,我有這個$rootscope。我在這裏說的原因很簡單:用戶可以正常使用應用程序,但他也可以決定使用F5刷新頁面。這樣,我可以通過URL決定用戶正在運行的應用程序。

$rootScope.$on('$stateChangeStart', function(e, toState, toParams, fromState, fromParams) { 
       // bunch of other code 
          var path = $location.path(); 
          console.log($location); 
          if (path.indexOf("pricelist") > -1) { 
           authentication.setApplication("PRICELIST"); 
          } else { 
           authentication.setApplication("HUB"); 
          } 
          $state.go(toState, toParams); 
         } 
        } 
       }); 
      }); 

如果URL包含「pricelist」,它應該將應用程序名稱設置爲「PRICELIST」。但是,該語句返回false,因此它設置了錯誤的名稱。

調試後,我發現一個很奇怪的$locationconsole.log of $location

正如你看到的,有兩個$$path:一個正確的URL和一個只/。正確的是包含/pricelist的那個,但是$location.path()似乎返回了錯誤的一個。

這裏發生了什麼?我究竟做錯了什麼?

+0

當你製作console.log($ location)時,路徑是「/」,當你打開它時,它是對象的一個​​活動版本,所以它在兩者之間發生了變化。您正在使用stateChangeStart,因此尚未進行更改,這就是爲什麼 – ThibaudL

+0

但爲什麼$ location還包含正確的URL? – Bv202

+0

它並不是說你的控制檯是這樣工作的,第一行是靜態的,它不能改變,它在stateChangeStart中顯示。當您在控制檯中打開對象時,每個字段都是動態的,因此您可以看到新值 – ThibaudL

回答

1

因爲您正在偵聽$stateChangeStart事件,所以$location.path()仍然是當前路徑,而不是它前往的路徑。

您應該驗證toState參數。