2016-10-25 5 views
-1

я использую angular2Как angular2 получить запрос-параметры, как это "сортировка = FIELD1, ASC и сортировки = field2, описание и сортировки = field3, ASC"

если 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" form sort: "[object Object]"

ответ

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}`; 
    } 
} 

Затем при добавлении запроса Params вобще

this.router.navigate(['...'], { queryParams: { sort: new Sort('field1', 'desc') }}); 

Угловая будет вызывать toString на экземпляре Sort при создании запроса Params. Затем на принимающей стороне просто позвоните Sort.parse(value).