ui-router在语法上改变状态时出现问题

时间:2016-04-19 12:13:11

标签: javascript angularjs angular-ui-router

我有一个小应用程序,使用ui-router以下面的方式设置一些状态:

$urlRouterProvider.otherwise("/app/dashboard"), 
 $stateProvider.state("app", {
     url: "/app",
     templateUrl: "wwwroot/Views/app.html",
     resolve: loadSequence("chartjs", "chart.js", "chatCtrl"),
     "abstract": !0,
     data: {
         requireLogin: true
     }
 }).state("app.dashboard", {
     url: "/dashboard",
     templateUrl: "wwwroot/Views/dashboard.html",
     resolve: loadSequence("d3", "ui.knob", "countTo", "dashboardCtrl"),
     title: "Dashboard",
     ncyBreadcrumb: {
         label: "Dashboard"
     },
     data: {
         requireLogin: true
     }
 ...
}).state("login", {
     url: "/login",
     template: '<div ui-view class="fade-in-right-big smooth"></div>',
     "abstract": !0,
     data: {
         requireLogin: false
     }
}).state("login.signin", {
     url: "/signin",
     templateUrl: "wwwroot/Views/login_login.html",
     resolve: loadSequence("loginCtrl"),
     title: "Login",
     data: {
         requireLogin: false
 }

然后我尝试始终重定向到login状态,如果没有通过执行以下操作来识别用户:

$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
    var requireLogin = toState.data.requireLogin;
    if (requireLogin && $rootScope.user.name === 'Unknown') {
        event.preventDefault();
        $state.go('login.signin');
    }
});

每次我尝试运行此应用时,它都会从Index.aspx开始,由于otherwise命令,它会在/app/dashboard处开始。状态变化被接收,因为我没有确定自己,我被重定向到登录页面。之后出于某种原因,我立即再次被重定向到/app/dashboard。这会导致状态更改再次被拾取,因此它再次进入登录页面......依此类推。

出于某种原因,otherwise命令为我按下的每个链接启动(声明我改变了)。

是什么导致第二次立即重定向到/app/dashboard

0 个答案:

没有答案