我有一个像这样的Angular端点:
$stateProvider.state("auth.signin", {
url: "/signin",
views: {
"auth-view@auth": {
templateUrl: "views/auth/signin.html",
controller: "SigninController"
}
}
});
我想要SigninController
的过滤器(或中间件),所以如果用户已经登录,我想将他重定向到我的HomeController
。
在伪代码中,我正在寻找类似的东西:
$stateProvider.state("auth.signin", {
url: "/signin",
views: {
"auth-view@auth": {
templateUrl: "views/auth/signin.html",
controller: "SigninController"
}
},
before: () => {
if (User.loggedIn() === true) {
return $state.go("app.home");
}
}
});
我在很多框架上使用了类似的功能,所以我非常肯定Angular也有这样的东西。什么是Angular的做法?
谢谢。
Ps:我还没有使用Angular 2.
答案 0 :(得分: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
})
}]);
请参阅this documentation以获取参考资料