我想显示404错误页面,但我也希望在位置保存错误的网址。
如果我做这样的事情:
$urlRouterProvider.otherwise('404');
$stateProvider
.state('404', {
url: '/404',
template: error404Template
});
网址将更改为/404
。如何在不更改实际网址的情况下在错误的网址上显示错误消息?
答案 0 :(得分:38)
此方案有解决方案。我们使用1)一个ui-router
原生功能和2)一个配置设置。可以观察到working example here。
1)ui-router状态定义的原生特性是:
不需要
url
。可以定义国家而不在地点代表。
2)配置设置为:
otherwise()
for invalid routes,哪个参数不一定是带有默认网址的字符串,但也可以是一个函数(引用):路径字符串|函数要重定向到的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();
});
中的所有内容
答案 1 :(得分:15)
从ui-router#0.2.15
开始,您可以使用$state.go()
并发送选项不更新位置:
$urlRouterProvider.otherwise(function($injector) {
var $state = $injector.get('$state');
$state.go('404', null, {
location: false
});
});