我有一个小应用程序,使用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
?