使用ui-router显示404错误页面时如何更改URL

时间:2014-04-25 16:06:28

标签: angularjs angular-ui-router

我想显示404错误页面,但我也希望在位置保存错误的网址。

如果我做这样的事情:

$urlRouterProvider.otherwise('404');
$stateProvider
    .state('404', {
        url: '/404',
        template: error404Template
    });

网址将更改为/404。如何在不更改实际网址的情况下在错误的网址上显示错误消息?

2 个答案:

答案 0 :(得分:38)

此方案有解决方案。我们使用1)一个ui-router原生功能和2)一个配置设置。可以观察到working example here

1)ui-router状态定义的原生特性是:

  

不需要url。可以定义国家而不在地点代表。

2)配置设置为:

  

路径字符串|函数要重定向到的url路径或返回url路径的函数规则。函数版本传递两个参数:$ injector和$ location

解决方案:这两者的组合。我们会state 没有 url和自定义otherwise

$stateProvider
  .state('404', {
    // no url defined
    template: '<div>error</div>',
  })

$urlRouterProvider.otherwise(function($injector, $location){
   var state = $injector.get('$state');
   state.go('404');
   return $location.path();
});

检查此working example

中的所有内容

答案 1 :(得分:15)

ui-router#0.2.15开始,您可以使用$state.go()并发送选项不更新位置:

$urlRouterProvider.otherwise(function($injector) {

  var $state = $injector.get('$state');

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

});