html5mode 中断 AngularJS 路由

html5mode breaks AngularJS routing

我在将 html5Mode 与 ngRoute 一起使用时遇到问题,这与其他人在同一件事上遇到的问题不太一样。这是我的代码中最相关的部分:

(function () {
  var config = function ($routeProvider, $locationProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'home/home.view.html',
        controller: 'homeCtrl',
        controllerAs: 'vm'
      })
      .when('/about', {
        templateUrl: 'common/views/genericText.view.html',
        controller: 'aboutCtrl',
        controllerAs: 'vm'
      })
      .when('/location/:locationId', {
        templateUrl: 'locationDetail/locationDetail.view.html',
        controller: 'locationDetailCtrl',
        controllerAs: 'vm'
      })
      .otherwise({redirectTo: '/'});

    /* $locationProvider.html5Mode({
     enabled: true,
     requireBase: false
    }); */
  };

  angular
    .module('loc8r', ['ngRoute', 'ngSanitize'])
    .config(['$routeProvider', '$locationProvider', config]);
})();

这个问题专门出现在 /location/:locationId 的路线上。在 html5Mode 开启的情况下,尝试加载像 http://127.0.0.1:3000/location/5a27ab691c5e0a989c0634da 这样的 URI 会导致空白页面。奇怪的是,Node 的日志输出告诉我模板和控制器都被访问了。更奇怪的是,如果我将路由从 /location/:locationId 更改为 /:locationId 并加载像 http://127.0.0.1:3000/5a27ab691c5e0a989c0634da 这样的 URI,那么页面将加载。但是让 /location/:locationId 工作的唯一方法是禁用 html5Mode,然后转到 http://127.0.0.1:3000/#!/location/5a27ab691c5e0a989c0634da。但这很丑陋。在这种情况下,如何让 html5Mode 工作?

如有必要,我可以将所有最新更改推送到 GitHub,然后提供完整代码。

您是否在 index.html 文件中设置了 base 属性?

检查: