我从内置路由器Angulars移动使用ui-router
(和它的真棒)的过程,但我有一个小问题:
我基本上有一个“ 家“有两个孩子的意见(注册和登录)我也有应用限制一些网页所以我使用了一个决心页:
.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('home');
$stateProvider.state('home', {
url: '/home',
templateUrl: 'partials/home.html',
controller: 'LoginController'
}).state('home.login', {
url: '/login',
templateUrl: 'partials/login.html',
controller: 'LoginController'
}).state('home.register', {
url: '/register',
templateUrl: 'partials/register.html',
controller: 'LoginController'
})
$stateProvider.state('console', {
url: '/console',
templateUrl: 'partials/console.html',
controller: 'ConsoleController',
resolve: {
currentAuth: function(Authentication) {
return Authentication.requireAuth();
}
}
});
认证只是一个服务,我已经创建用户是否登录到Firebase
与否(它能正常工作,即使我没有它注入.config
)
,处理任何错误路线的功能,它检查:
.run(function($transitions, $rootScope, $state) {
$transitions.onError({}, function() {
$rootScope.message = "You need to log in first";
redirectError();
});
function redirectError() {
$state.go('home', {}, { reload : true});
}});
我在函数中有$state.go
,因为AngularJS说如果我尝试在onError
函数中使用它,但它按预期工作时找不到它。
因此onError
每次我尝试直接去/console
没有登录,并允许我进入该状态,如果我登录,所以它工作得很好。
我的问题是每当我点击主页的子链接两次。它会在我点击它时注入HTML,但是当我再次单击它时,它将调用$transitions.onError
,并显示错误消息($rootScope.message
)。有人知道为什么吗?解析函数不适用于“家”的子状态。
我用AngularJS 1.6.4