我正在使用Angular v1.4.2
我目前正在处理一个如下所示的查询字符串:
http://localhost/myProject/apply/?A=100&B=ABC&C=Test#/step1?D=3&E=X1&F=1
这意味着在哈希之前声明A,B和C. D,E和F在哈希
之后声明我无法更改此网址,因为它是由外部API生成的,并且还有一个原因,即网址需要像这样。
我一直试图找到读取所有参数的方法。到目前为止我尝试过的事情:
$location.search();
仅返回{D, E, F}
理想情况下,$location.search();
应返回{A,B, C, D, E, F}
其中一个解决方案建议更改位置提供程序设置。我的是这些:
function $LocationProvider() {
var hashPrefix = '',
html5Mode = {
enabled: false,
requireBase: true,
rewriteLinks: true
};
将这些设置更改为:
function $LocationProvider() {
var hashPrefix = '',
html5Mode = {
enabled: true,
requireBase: false,
rewriteLinks: false
};
没有修复任何东西,无论如何,对于这个尺寸的项目,我不想弄乱这些设置。
有没有办法读取所有查询字符串参数?
答案 0 :(得分:0)
我最终得到了这个。如果有更好的方法,我想知道
创建一个工厂,读取左侧的所有参数。 此时,无法读取右侧的参数。
export class QueryStringFactory {
static $inject = ["$window", "$location"];
private window: ng.IWindowService;
private location: angular.ILocationService;
constructor(public $window: ng.IWindowService, public $location: angular.ILocationService) {
this.window = $window;
this.location = $location;
}
searchLeft() {
var left = window.location.search
.split(/[&||?]/)
.filter((x) => { return x.indexOf("=") > -1; })
.map((x) => { return x.split(/=/); })
.map((x) => {
x[1] = x[1].replace(/\+/g, " ");
return x;
})
.reduce((acc, current) => {
acc[current[0]] = current[1];
return acc;
}, {});
return left;
}
static factory() {
var instance = ($window: ng.IWindowService, $location: angular.ILocationService) =>
new QueryStringFactory($window, $location);
return instance;
}
}
注册工厂:
angular.factory("QueryStringFactory", Utils.QueryStringFactory.factory());
并在控制器中使用它:
constructor(public $window: angular.IWindowService | any,
public $location: angular.ILocationService, public queryString: Utils.QueryStringFactory) {
var qsParamsRight = $location.search();
var qsParamsLeft = queryString.searchLeft();
var qsAllParams = $.extend(true, {}, qsParamsLeft, qsParamsRight);
});