如何捕获无效的URL?
How to catch the invalid URL?
我正在使用 Angular JS ui-router 创建一个简单的 HTML 站点。
我有一个自定义的 404 页面 ('www.mysite/#/error/404'),如果用户键入 url,例如 'www.mysite/#/invalidUrl',用户将被重定向到该页面。此功能是通过以下代码片段实现的:
$urlRouterProvider
.when('', '/')
.when('/home', '/')
.otherwise('/error/404');
以及以下状态片段:
$stateProvider.state('404', {
parent: 'app',
url: '^/error/404',
views: {
'errorContent@main': {
controller: 'error404Controller',
templateUrl: 'js/general/templates/error404.html'
}
}
});
我正在尝试捕获用户请求的无效 URL 以显示给用户,如下所示。
找不到您请求的 URL
请求:www.mysite.com/#/invalidUrl
我试过监听“$stateNotFound”事件,该事件似乎只在请求特定的无效状态时触发。我也尝试过监听事件“$stateChangeStart”、“$locationChangeStart”和“$locationChangeSuccess”,但找不到实现此功能的方法。
这可能吗?请分享您的想法 - 谢谢
太棒了!谢谢 Radim Köhler. I don't know how I didn't land on that thread 我搜索时帮助我得到了答案。
我更改了该线程中的答案以适合我的场景,我将在下面留下以供其他用户参考。
$stateProvider.state('404', {
parent: 'app',
url: '^/error/404',
views: {
'errorContent@main': {
controller: 'error404Controller',
templateUrl: 'js/general/templates/error404.html'
}
}
});
$urlRouterProvider
.when('', '/')
.when('/home', '/')
.otherwise(function ($injector, $location) {
var state = $injector.get('$state');
state.go('404', { url: $location.path() }, { location: true });
});
所以神奇的变化是为 'otherwise' 选项定义的函数。我没有更改 'error' 状态的 URL。相反,我使用 'state.go' 激活状态“404”并将位置路径作为状态参数传递。
设置location=true
会带你到URL的状态,location=false
不会。无论您喜欢哪种方式,现在都可以轻松访问无效 URL。
我正在使用 Angular JS ui-router 创建一个简单的 HTML 站点。
我有一个自定义的 404 页面 ('www.mysite/#/error/404'),如果用户键入 url,例如 'www.mysite/#/invalidUrl',用户将被重定向到该页面。此功能是通过以下代码片段实现的:
$urlRouterProvider
.when('', '/')
.when('/home', '/')
.otherwise('/error/404');
以及以下状态片段:
$stateProvider.state('404', {
parent: 'app',
url: '^/error/404',
views: {
'errorContent@main': {
controller: 'error404Controller',
templateUrl: 'js/general/templates/error404.html'
}
}
});
我正在尝试捕获用户请求的无效 URL 以显示给用户,如下所示。
找不到您请求的 URL请求:www.mysite.com/#/invalidUrl
我试过监听“$stateNotFound”事件,该事件似乎只在请求特定的无效状态时触发。我也尝试过监听事件“$stateChangeStart”、“$locationChangeStart”和“$locationChangeSuccess”,但找不到实现此功能的方法。
这可能吗?请分享您的想法 - 谢谢
太棒了!谢谢 Radim Köhler. I don't know how I didn't land on that thread 我搜索时帮助我得到了答案。
我更改了该线程中的答案以适合我的场景,我将在下面留下以供其他用户参考。
$stateProvider.state('404', {
parent: 'app',
url: '^/error/404',
views: {
'errorContent@main': {
controller: 'error404Controller',
templateUrl: 'js/general/templates/error404.html'
}
}
});
$urlRouterProvider
.when('', '/')
.when('/home', '/')
.otherwise(function ($injector, $location) {
var state = $injector.get('$state');
state.go('404', { url: $location.path() }, { location: true });
});
所以神奇的变化是为 'otherwise' 选项定义的函数。我没有更改 'error' 状态的 URL。相反,我使用 'state.go' 激活状态“404”并将位置路径作为状态参数传递。
设置location=true
会带你到URL的状态,location=false
不会。无论您喜欢哪种方式,现在都可以轻松访问无效 URL。