Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.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 无法从url中删除#_Javascript_Angularjs - Fatal编程技术网

Javascript 无法从url中删除#

Javascript 无法从url中删除#,javascript,angularjs,Javascript,Angularjs,当我有这样的代码时: phonecatApp.config(['$routeProvider', function($routeProvider) { $routeProvider. when('/phones', {templateUrl: 'partials/phone-list.html',controller: 'PhoneListCtrl' }). when('/phones/:phoneId', {templateUrl: 'parti

当我有这样的代码时:

phonecatApp.config(['$routeProvider',
  function($routeProvider) {
    $routeProvider.
      when('/phones', {templateUrl: 'partials/phone-list.html',controller: 'PhoneListCtrl'
      }).
      when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html',controller: 'PhoneDetailCtrl'
      }).
      otherwise({redirectTo: '/phones'
      });
  }]);
我可以通过转到url:
http://localhost:8000/app/#/phones

但是,用于从url中删除#。如果我用以下代码替换上述代码:

phonecatApp.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
    $routeProvider.
      when('/phones', {templateUrl: 'partials/phone-list.html',   controller: 'PhoneListCtrl'}).
      when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: 'PhoneDetailCtrl'}).
      otherwise({redirectTo: '/phones'});

    $locationProvider.html5Mode({
         enabled: true,
         requireBase: false
    });
  }]);
然后我转到url:
http://localhost:8000/app/phones/
我看到的是/app/phones/的
索引,而不是我的普通网页。

你知道我哪里出错了吗?

如果你查看应用程序的
包.json
,你会看到
“开始”:“http服务器-a 0.0.0.0-p 8000”
。这将启动一个基本节点模块

http服务器是一个简单的零配置命令行http服务器

它没有提供太多的选择。但是,您可以使用
-P
(注意大小写)创建代理

-p或--proxy将无法在本地解析的所有请求代理到给定的url。e、 g.:-P

因此,将开始行更改为“开始”:“http服务器-a 0.0.0.0-p 8000-phttp://localhost:8000/app/“
至少可以用于测试

当您向
http://localhost:8000/app/phones
,服务器将代理它到您的
/app/
目录,因为它无法解析。一旦应用程序加载,客户端路由器将启动,并使用HTML5重写将您重定向到请求的页面


在angular phonecat应用程序中,它的设计没有考虑HTML5模式,并且它包含一个与示例中创建的虚拟路由冲突的物理目录。无论您将应用程序部署到哪个服务器,HTML5Mode都希望没有与您的虚拟路由匹配的物理目录,因为在Angular应用程序可以干预之前,这些路由由服务器解析。

好的。所以我用错误的方法解决了这个问题。 在遵循这些规则时,他们使用的是apache服务器,而不是apache服务器。 所以,为了启用html5配置,在本例中,必须配置这个npm http服务器-我找不到任何地方有文档记录可以这样做

所以,我从npm http服务器转移到apache服务器,并遵循以下步骤:


同样,底线是:在使用http服务器的基本模块时,不要浪费时间启用html5模式,这在官方教程中给出

需要将服务器设置为重新路由到应用程序入口点,因为您现在在URL中有虚拟目录Thank charlietfl,但您能解释一下如何做到这一点吗?根据服务器类型,使用
htaccess
例如在apache中或在IISI中的web.config,我将通过npm start启动服务器,遵循本教程:Thank Claies,你能告诉我让HTML5模式工作的步骤吗?我做了以下更改:“开始”:“http服务器-a 0.0.0.0-p 8000-p-I false”,仍在显示索引页。我刚刚再次查看,该项目有一个映射到
/app/phones
的物理目录,这将阻止HTML5模式正常工作。您可能需要更改目录名,或者更改您正在使用的虚拟URL。对,因此我将目录电话更改为phones_json,现在我在浏览器中发现“找不到”继续。更改启动选项后是否重新启动服务器?您确实需要完整的url,包括
http://
,代理选项才能工作;我肯定你把它包括进去了,但可能是从评论中删除了。嗯,在没有
自动索引
选项的情况下尝试一下。我很高兴你能做到这一点,这基本上是我从一开始就想说的,但我想至少努力尝试一下。我在回答中确实说过,基本服务器没有很多配置选项。