AngularJS非HTML5模式下$location.search读取中间查询参数失效问题
AngularJS 非HTML5模式下
$location.search()返回结果异常成因 这一问题是AngularJS 1.x版本Hashbang模式(默认模式,未启用HTML5模式时的状态)的内置解析逻辑直接导致的,核心原因如下:
- Hashbang模式的设计初衷是兼容不支持HTML5 History API的旧浏览器,所有应用内的路由状态、查询参数都会默认存放在哈希片段(
#后的内容)中,因此$location服务的解析逻辑天然仅处理#之后的内容,完全忽略#之前的查询字符串。 - 对于符合RFC3986规范的URL
https://my.domain.com/path/index.html?param=value#hashpart,查询参数param=value放在#之前,属于原生浏览器URL的查询部分,不在AngularJS$location的解析范围内,因此$location.search()返回空对象。 - 对于非规范格式的URL
https://my.domain.com/path/index.html#hashpart?param=value,param=value放在#之后,会被AngularJS识别为应用内的查询参数,因此$location.search()会正常解析返回{'param':'value'}。
如果需要在第一种合规URL格式下获取#前的查询参数,直接调用原生window.location.search解析即可,无需调整$location的配置。
内容的提问来源于stack exchange,提问作者Ishan Hettiarachchi
相关产品推荐
相关产品推荐

