html5mode打破AngularJS路由

时间:2018-02-08 20:46:20

标签: javascript angularjs mean-stack angularjs-ng-route

我在使用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,然后提供完整的代码。

1 个答案:

答案 0 :(得分:2)

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

检查:How to setup AngularJS $locationProvider HTML5 mode for non-root base urls?