AngularJS控制器中间件

时间:2016-09-20 14:32:31

标签: angularjs

我有一个像这样的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.

1 个答案:

答案 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以获取参考资料