Как 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),

Другие вопросы по тегам