2016-09-20 49 views
0

我有一個角端點就像這樣:AngularJS控制器中間件

$stateProvider.state("auth.signin", { 
    url: "/signin", 
    views: { 
     "[email protected]": { 
      templateUrl: "views/auth/signin.html", 
      controller: "SigninController" 
     } 
    } 
}); 

我希望有一個過濾器(或中間件)我SigninController因此如果用戶已經登錄之前,我想他重定向到我HomeController

在僞代碼,我正在尋找這樣的事情:

$stateProvider.state("auth.signin", { 
    url: "/signin", 
    views: { 
     "[email protected]": { 
      templateUrl: "views/auth/signin.html", 
      controller: "SigninController" 
     } 
    }, 
    before:() => { 
     if (User.loggedIn() === true) { 
      return $state.go("app.home"); 
     } 
    } 
}); 

我用框架的很多類似的功能,所以我敢肯定有角這樣的事情了。做這件事的角度是什麼?

謝謝。

Ps:我還沒有使用Angular 2。

+0

this documentation你所描述的是一個'resolve'。參見路由器文檔 – charlietfl

回答

2

的UI路由器觸發$stateChangeStart的事件,你可以捕捉:

app.run(["$rootScope", "$state", function($rootScope, $state) { 

    $rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams, options) { 
     if (toState.name === "auth.signin" && userIsLoggedInLogicHere) { 
      event.preventDefault(); // prevent routing to the state 
      $state.transitionTo("app.home"); 
     } 
     // else do nothing, it will just transition to the given state 
    }) 
}]); 

參考