在angularjs app中将查询字符串放入哈希后

时间:2016-02-02 04:21:10

标签: javascript angularjs url-rewriting

我有一个小的AngularJS搜索应用程序,最初通过GET从(非AngularJS)HTML页面中的表单发送数据:

<form accept-charset="UTF-8" name="librarysearch" id="us-form" action="#" method="get" >

我使用一些jQuery将表单提交给AngularJS应用程序:

$("#us-form").attr("action", "/unified-search/app/#/results?q=" + q).submit();

My Angular $ routeProvider将球传递给FormCtrl。 FormCtrl抓取查询参数并使用$ location.path将参数发送到ResultsCtrl:

$location.path('/results').search( { q: q} ); 

ResultsCtrl使用query参数调用各种服务并将结果呈现给用户。这一切都很精彩。那我为什么要在这里写一个问题呢?

嗯,搜索生成的网址如下:

.../unified-search/app/?q=physiology#/results?q=physiology

这有两个问题:

i)观察不美观

ii)它适用于大多数浏览器,但IE / Edge会在#&#39;#&#39;之后删除所有内容。这样做,找不到我的AngularJS应用程序 - 帮助!

我已经在.htaccess中尝试了许多正则表达式来重写URL,但是IE总是将查询字符串放在&#39;#&#39;之后。 - 它需要在&#39;#&#39;之后。为我的AngularJS应用程序工作。我怎么能实现这个目标呢?

2 个答案:

答案 0 :(得分:0)

我怀疑问题在于您使用$location.path('/results').search({q: q})设置路径和搜索参数。这将在哈希后追加/results,然后将查询添加到URL。您不应该这样做,因为您的jQuery表单提交已经在处理导航。

答案 1 :(得分:0)

FWIW我通过在引用表单中使用POST而不是GET来解决这个问题。这将URL格式修复为:

.../unified-search/app/#/results?q=physiology

这就是我想要的,这也解决了IE中的问题。