Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular-$locationProvider.html5Mode(true)阻止routeProvider的其他方法_Javascript_Angularjs - Fatal编程技术网

Javascript Angular-$locationProvider.html5Mode(true)阻止routeProvider的其他方法

Javascript Angular-$locationProvider.html5Mode(true)阻止routeProvider的其他方法,javascript,angularjs,Javascript,Angularjs,我有一个问题,只要我广告$locationProvider.html5Mode(true);对于我的应用程序,它不再遵循routeProvider中定义的其他方法。它不返回404页面,而是简单地显示如下错误页面: 无法获取/myErrorURL app.js angular .module('myApp', [ 'ngAnimate', 'ngCookies', 'ngResource', 'ngRoute', 'ngSanitize', 'n

我有一个问题,只要我广告$locationProvider.html5Mode(true);对于我的应用程序,它不再遵循routeProvider中定义的其他方法。它不返回404页面,而是简单地显示如下错误页面:

无法获取/myErrorURL

app.js

angular
  .module('myApp', [
    'ngAnimate',
    'ngCookies',
    'ngResource',
    'ngRoute',
    'ngSanitize',
    'ngTouch'
  ])
  .config(function ($routeProvider, $locationProvider) {
    $routeProvider
      .when('/', {
        templateUrl: 'views/main.html',
        controller: 'MainCtrl',
        controllerAs: 'main'
      })
      .when('/about', {
        templateUrl: 'views/about.html',
        controller: 'AboutCtrl',
        controllerAs: 'about'
      })
      .when('/projects', {
        templateUrl: 'views/projects.html',
        controller: 'ProjectsCtrl',
        controllerAs: 'projects'
      })
      .when('/contact', {
        templateUrl: 'views/contact.html',
        controller: 'ContactCtrl',
        controllerAs: 'contact'
      })
      .otherwise({
        redirectTo: '404.html'
      });
      // use the HTML5 History API
      $locationProvider.html5Mode(true);
  });
我使用Yeoman angular模板构建了我的应用程序,除了我设置的量角器测试之外,现在几乎所有的东西都是现成的。

我想,消息

无法获取/myErrorURL

是服务器问题

Angular$location html5模式只解决客户端设置-url不包含#,位置控件也包含url中的路径部分


Html5模式需要服务器端配置。每个请求都必须返回应用程序入口点——通常是index.html。您的服务器按路由路径搜索文件,而不是返回索引-这就是您看到错误的原因

这是grunt服务器的问题(谢谢@milanlempera)。对于任何想要解决这个问题的人,我在Kryx对他自己问题的回答中找到了答案

如果其他人偶然发现了这一点,这里是解决方法:

(添加的唯一一行是modRewrite行)

确保在grunt文件的顶部声明了以下内容:

var modRewrite = require('connect-modrewrite');
我唯一能做的补充是,您需要通过npm安装modrewrite,如下所示:

npm install connect-modrewrite --save-dev

您是否设置了有效的
?当使用
$locationProvider.html5Mode(true)时,这是必需的是的,我做了。请看我下面的答案拉斐尔。谢谢,你说得对。这实际上和我的dist版本一样工作正常,我只需要在grunt服务器上添加一行代码。
npm install connect-modrewrite --save-dev