在AngularJS中,查询字符串位于我的域和控制器地址之间



我使用的是AngularJS,并且有一个表单的action address是用AngularJS加载的。

当我提交表单时q值在我的域和控制器地址之间传递,像这样:

http://localhost/?q=test#/en/search/

<li>
  <form action="{{'/#/'+ Page.Culture + '/search'}}">
    <input type="text" name="q" ><button type="submit">Search</button>
  </form>
</li>

为什么?

您是否有意使用散列路由?查询字符串的位置是正确的哈希路由url - #之后的一切都是客户端,而不是发送到服务器,不像查询字符串参数。因此,当浏览器提交表单时,URL变为http://locahost/?q=test#/en/search

Angular可以把一个URL放在一起,其中q也在哈希之后,如文档中所示:

$location.path('/new').search('x=y');
$location.absUrl() == 'http://example.com/base/index.html#!/new?x=y'

,但您显然允许浏览器提交表单,它不会构造这样的URI,因为服务器根本不会接收参数q

您可以手动捕获提交事件和路由以获得更好的hashbang URI,或者您可以切换到HTML5模式以获得更漂亮的url。这也需要很少的后端支持,也就是说,除了特定的API端点之外,您将从任何请求的URL发送索引HTML页面。

最新更新