如果用户输入 myURL / 或 myURL /#/ 甚至 myURL /#/ foo ,他们会进入我的索引页面。
但是如果他们输入 myURL / foo ,他们会得到404.这太可怕了。应将它们重定向到 / 。
我正在努力实现这一点,并没有太多运气。
(function() {
'use strict';
angular
.module('myApp')
.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('index', {
name: 'index',
url: '/',
templateUrl: 'js/views/page1.html',
controllerAs: 'page1Controller',
data: { pageTitle: 'Main' }
})
.state('page2', {
name:'page2',
url: '/page2/:id',
templateUrl: 'js/views/page2.html',
controllerAs: 'page2Controller',
data: { pageTitle: 'page2' }
})
$urlRouterProvider.otherwise('/');
}]);
})();
我看过几十篇文章,似乎无处可寻找这个简单的案例。
答案 0 :(得分:0)
在official docs上提到您可以将$injector
和$location
传递给该功能。
他们的例子如下:
app.config(function($urlRouterProvider){
// if the path doesn't match any of the urls you configured
// otherwise will take care of routing the user to the specified url
$urlRouterProvider.otherwise('/index');
// Example of using function rule as param
$urlRouterProvider.otherwise(function($injector, $location){
... some advanced code...
});
})
为实现目标,您可以做的是创建一个状态,无论何时它不匹配并输入其他信息,都将其发送到该状态。
$urlRouterProvider.otherwise(function($injector, $location){
$injector.get('$state').go('404');
});
我没有测试过这个,但是应该可行。