找不到'当routeProvider有id时

时间:2014-07-05 18:16:39

标签: angularjs route-provider

我将routeProvider设置为:

routeProvider.when('/', {templateUrl: 'views/index.html', controller: 'IndexCtrl'});
  // $routeProvider.when('/ayat/:surah/:from/:to', {templateUrl: 'views/quran.html', controller: 'AyatCtrl'});
  $routeProvider.when('/:id/:range?', {templateUrl: 'views/quran.html', controller: 'QuranCtrl'});
  $routeProvider.when('/search?', {templateUrl: 'views/search.html', controller: 'SearchCtrl'});
  $routeProvider.when('/about', {templateUrl: 'views/about.html'});
  $routeProvider.when('/contact', {templateUrl: 'views/contact.html'});
  $routeProvider.when('/sorry', {templateUrl: 'views/sorry.html'});
  $routeProvider.otherwise({redirectTo: '/'});
  $locationProvider.html5Mode(true);
})

每当我刷新页面时,我都会'找不到'

我之前没有遇到过这个问题

$routeProvider.when('/:extension/:id/:range?', {templateUrl: 'views/quran.html', controller: 'QuranCtrl'});
$locationProvider.html5Mode(false);

1 个答案:

答案 0 :(得分:0)

种子项目中的package.json文件指定npm start只运行http-server,它是一个节点模块。它似乎没有正确处理html5mode,因为为了处理它,它需要将所有不是特定文件的请求重定向到index.html文件。您可以创建一个非常简单的自定义节点服务器,只提供正确的文件,并允许刷新您的浏览器和所有内容。

Check out this simple example

在应用程序的根目录(与app文件夹相同的级别)添加它,然后通过将脚本的start属性更改为"start": "node server.js"来更改package.json

确定是否将请求路由到index.html的方法就是这个

function isSpecificFile(path){
  var regex = /^\/(bower_components|css|img|js|partials)\/.*/;
  return regex.test(path);
}

如果您有localhost:8000/foo之类的请求,则需要以角度方式完成,因此将加载index.html并且angular将使用“/ js / controllers / foo_ctrl”形式的请求加载特定文件。 js',服务器不会路由到index.html。

我会为任何生产寻找更强大的解决方案,例如。