2017-07-07 81 views
0

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

回答

0

如果你檢查一下兩次相同的路線後過渡對象,你會看到「成功:失敗」。我想它會考慮導航到你已經失敗的路線,從而觸發onError方法。我想自己澄清一下,因爲我認爲成功的財產是方法的觸發器可能是錯誤的。

無論如何,我已經解決了這個問題,我甚至沒有意識到我有這個問題。我正在檢查transition。$ to()。name爲我想要拒絕的路由,並在if塊中處理這些情況。我想另一個解決方法是禁用當前訪問的路由按鈕。 **或使用其他轉換對象方法來滿足您想要的任何用例。