Как angular2 получает запрос-параметр, такой как "sort=field1,asc&sort=field2,desc&sort=field3,asc"
Я использую angular2
если URL-адрес такой:
URL? сортировать =field1, по возрастанию и сортировки =field2, по убыванию
я использую
getParams() {
if (this.route.snapshot.queryParams) {
console.log(this.route.snapshot.queryParams)
// it print like this : sort: "[object Object]"
console.log(typeof this.route.snapshot.queryParams['sort']); // is string
}
}
Как получить "field1,asc" и "field2,desc" вида sort: "[объект объекта]"
1 ответ
Решение
Параметры всегда только строки. Обойти это невозможно. Поэтому, когда вы попытаетесь передать объект в качестве значения параметра, он просто вызовет Object.toString
на объекте, который по умолчанию [object Object]
, Если у вас есть класс, вы можете переопределить toString
, Может быть что-то вроде
class Sort {
constructor(public field: string, public order: string) {}
static parse(value: string): Sort {
const split = value.split(',');
return new Sort(split[0], split[1]);
}
toString() {
return `${this.field},${this.order}`;
}
}
Затем, когда вы добавляете параметры запроса, просто сделайте
this.router.navigate(['...'], { queryParams: { sort: new Sort('field1', 'desc') }});
Угловой назову toString
на Sort
экземпляр при создании параметров запроса. Тогда на принимающей стороне просто позвоните Sort.parse(value)
,