我從內置路由器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