【问题标题】:Angularjs routing OTHERWISE causes 404Angularjs路由否则会导致404
【发布时间】:2014-09-29 23:56:54
【问题描述】:

我有一个单页应用程序,我根据 url 地址路由到不同的页面,当用户在 url 中输入不存在的页面时,我想重定向到主页,所以我使用 else 语句,但是它会导致 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);
}]);

【问题讨论】:

  • 你有/products吗?
  • 尝试删除redirectTo: '/products'
  • 是的,我有 /products,它工作得很好,但是当我输入不存在的页面时,当我遇到问题时,它会返回 404 而不是重定向到 /products

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


【解决方案1】:

您不需要when('/'... 和其他,因为它们基本上做同样的事情。 否则是获取任何不匹配的内容的包罗万象,因此您无需专门路由“/”。

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

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

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

【讨论】:

猜你喜欢
  • 2015-04-07
  • 2014-07-12
  • 1970-01-01
  • 2022-11-06
  • 2015-08-13
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
相关资源
最近更新 更多