簡體   English   中英

AngularJS:了解$ rootScope。$ on('$ routeChangeSuccess

[英]AngularJS: Understanding $rootScope.$on('$routeChangeSuccess

我正在登錄頁面,成功后,它重定向到主頁。 默認情況下,我顯示登錄頁面此代碼:

app.run(function($rootScope, $location) {
  $rootScope.$on('$routeChangeSuccess', function() {
      $location.url("/login");
  });
});

然后在驗證后端的用戶/傳遞詳細信息后,我將用戶帶到主頁:

$scope.login = function() {
    if ($scope.username === 'admin' && $scope.password === 'pass') {
      console.log('successful')
      $rootScope.$on('$routeChangeSuccess', function() {
          $location.url("/home")
      });
      $location.url("/blah");
    } else {
      $scope.loginError = "Invalid username/password combination";
      console.log('Login failed..')
    };
  };

如果我刪除if語句的else部分之前的第二個$location.url ,則重定向似乎不起作用。 然而,它沒有使用該網址( /blah ),它home 但如果刪除了url blah ,則重定向邏輯不起作用。

我似乎無法理解為什么我必須使用兩個$location.url() 如果有人能幫助我理解這個重定向系統是如何工作的,我會覺得有用嗎?

這可能不是最好的做法,我願意接受如何改進的建議,這里是Plunker的例子

總而言之,這是一條錯誤的道路IMO ......

顯然你需要鎖定任何資源服務器端,因為客戶端總是可以在一個簡單的調試器中“改變”...但我想你已經知道了......

替代路由解決方案,如https://github.com/dotJEM/angular-routinghttps://github.com/angular-ui/ui-router IMO為您提供了一些更好的處理,但我們只是評估一些方法.. 。

其中之一是: http://plnkr.co/edit/ZUKB1v?p=preview雖然這需要你解決用戶所有路線...所以..:(...另一個辦法是: HTTP:// plnkr。 co / edit / iM9cA1?p =預覽可能會好一點......

最后,人們經常做的是提供http攔截器,當從服務器返回“未授權”錯誤代碼時,它會重定向到登錄頁面。 但這似乎是一種比你想象的更先進的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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