Angularjs路由OTHERWISE导致404

时间:2014-08-06 21:40:58

标签: angularjs routing routes http-status-code-404 route-provider

我有一个单页面应用程序,我根据url地址路由到不同的页面,我想在用户在url中输入非现有页面时重定向到主页,所以我使用其他语句,但是它会导致404错误,这里是我的路由配置。:

myApp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {

    $routeProvider.
        when('/', {
            redirectTo: '/products'        
        }).
        when('/products/:id?', {
            templateUrl: 'partials/products.html',
            controller: 'ProductsController'
        }).
        when('/orders/:id?', {
            templateUrl: 'partials/orders.html',
            controller: 'OrdersController'
        }).
        when('/auto', {
            templateUrl: 'partials/AutoComplete.html',
            controller: 'TypeaheadCtrl'
        }).
        otherwise({ redirectTo: '/' });

    $locationProvider.html5Mode(true);
}]);

修改

按照以下建议进行更改但是直到相同的效果,当我输入非现有页面时,它会转到错误404而不是/ products

myApp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {

    $routeProvider.
        when('/', {
            redirectTo: '/products'        
        }).
        when('/products', {
            templateUrl: 'partials/products.html',
            controller: 'ProductsController'
        }).
        when('/products/:id?', {
            templateUrl: 'partials/products.html',
            controller: 'ProductsController'
        }).
        when('/orders/:id?', {
            templateUrl: 'partials/orders.html',
            controller: 'OrdersController'
        }).
        when('/auto', {
            templateUrl: 'partials/AutoComplete.html',
            controller: 'TypeaheadCtrl'
        }).
        otherwise({ redirectTo: function () { return '/' } });

    $locationProvider.html5Mode(true);
}]);

1 个答案:

答案 0 :(得分:0)

你不需要when('/'...和其他因为他们基本上做同样的事情。 否则就是获得任何不匹配的东西,所以你不需要路由' /'具体

$routeProvider.
  when('/products/:id?', ...).
  when('/orders/:id?', ...).
  when('/auto', ...).
  otherwise({
    redirectTo: '/products'
  });

编辑问题是重定向到' / products'不匹配' / products /:id'。您需要添加另一条路线,如下所示:

when('/products', {
    templateUrl: 'partials/products.html',
    controller: 'ProductsController'
})