2017-07-07 62 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块中处理这些情况。我想另一个解决方法是禁用当前访问的路由按钮。 **或使用其他转换对象方法来满足您想要的任何用例。