AngularJS ui-router到一个状态但使用不同的URL

时间:2014-10-03 15:15:21

标签: javascript angularjs angular-ui-router

在我的AngularJS应用程序中,我想捕获错误并将用户发送到404状态,如下所示:

$rootScope.$on('$stateNotFound',  function(event, unfoundState, fromState, fromParams){ 
    //console.log(unfoundState.to);
    //console.log(unfoundState.toParams);
    //console.log(unfoundState.options);
    $state.go('404');
});

这适用于用户点击应用中的错误链接(,例如没有状态,有状态但没有内容由其他方法处理)等等。

代码加载404状态:

.state('404',
        {
            views: {
                'body': {
                    templateUrl: 'partials/404.html',
                }
            }
        });

但我想要做的是将URL更改为他们尝试访问的状态,因此基本上加载404状态但使用不正确的URL(因为404可以在服务器环境中工作)。

我调查过:

history.replaceState(null, null, unfoundState.to);
$state.go('404');

但是这会导致应用程序出现重大错误并更改URL而不是状态!

我该怎么做?

2 个答案:

答案 0 :(得分:1)

尝试此操作以捕获与之前任何路线不匹配的所有网址:

.state("404", {
    url: "*path", // will catch all URLs
    templateUrl: 'partials/404.html'
})

答案 1 :(得分:1)

根据docs,我认为你可以这样做:

$state.go('404',{},{location:false});

注意:我正在创建一个plunkr来验证,但我没有时间完全完成它