【问题标题】:AngularJS $routeProvider doesn't route properlyAngularJS $routeProvider 没有正确路由
【发布时间】:2017-09-06 09:33:55
【问题描述】:

所以我是 Angular 的新手,并试图弄清楚多条路由如何导致相同的 view/templateUrl 和控制器。这是我写的:

angular
  .module('mwsApp', [
    'ngAnimate',
    'ngCookies',
    'ngResource',
    'ngRoute',
    'ngSanitize',
    'ngTouch',
    'ui.bootstrap'
  ])
  .config(function ($routeProvider, $locationProvider) {
    // debugger
    $routeProvider
      .when('/', {
        templateUrl: 'index.html',
        controller: 'MainCtrl as vm',
      })
      .when('/rika', {
        templateUrl: 'index.html',
        controller: 'MainCtrl as vm',
      })
      // .otherwise({
      //   redirectTo: '/'
      // });

      $locationProvider.html5Mode(true).hashPrefix("!");
  });

问题:目前,如果我转到“localhost:9000/”,它会显示正确的版本,但如果我转到“localhost:9000/rika”,它会显示“无法获取 /rika”。

调试:我已将问题范围缩小到 html5Mode。我正在尝试摆脱 #! Angular 会自动添加到 URL 中,但是当我这样做时,会弹出错误。

感谢任何人的意见!

【问题讨论】:

  • 你无法摆脱地址散列,这违背了使用 Angular(也是 AJAX'ing)等路由的目的......
  • 是的,你可以,我没有亲自摆弄它,但它是可能的
  • 看看this SO
  • 我想人们每天都会学到一些新东西。为了什么好处,这似乎很麻烦?
  • 你可以使用$stateProvider来解决这个问题

标签: javascript angularjs html5mode


【解决方案1】:

local development 中的# 不能去掉,所以你需要评论这一行

$locationProvider.html5Mode(true).hashPrefix("!");

但是当你在一些server on production 然后uncomment 并用它来删除#

否则你会在reloads in local development 上不断收到错误消息

【讨论】:

  • 这仍然无法在生产环境中使用,site.com/rika 仍然会导致问题
  • 在您的 html 中添加基本标签,这样做不会有帮助,您需要根据您使用的 nginx、s3 等在您的服务器上进行一些设置
猜你喜欢
  • 2016-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-24
  • 1970-01-01
  • 2020-07-29
相关资源
最近更新 更多