将查询字符串放在 angularjs 应用程序中的哈希之后

Put query string after hash in angularjs app

本文关键字:哈希 之后 应用程序 angularjs 查询 字符串      更新时间:2023-09-26

我有一个小小的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();

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

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

结果 Ctrl 使用查询参数调用各种服务并将结果呈现给用户。这一切都非常有效。那么我为什么要在这里写一个问题呢?

好吧,从搜索生成的 URL 是这样的:

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

这有两个问题:

i( 观察不美观

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

我已经在 .htaccess 中尝试了许多正则表达式来重写 URL,但 IE 总是将查询字符串放在"#"之前 - 它需要在"#"之后才能让我的 AngularJS 应用程序工作。请问我怎样才能做到这一点?

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

FWIW 我通过使用 POST 而不是引用形式的 GET 来解决这个问题。这会将 URL 格式固定为:

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

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