Как извлечь значения из регистрозависимых переменных параметров запроса? - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть URL со строкой запроса id . Но переменная id может быть представлена ​​в URL как 'id' или 'Id' .

Насколько я понимаю, эти 2 будут рассматриваться по-разному. Для обработки следующих URL я написал код, как показано на скриншоте:

http://xxx/abc?id=10

http://xxx/abc?Id=10

введите описание изображения здесь

Кроме этого, есть ли простой способ обработки чувствительных к регистру переменных и правильного получения значений в angular4?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Если вы хотите иметь компонент, который показывает конкретный элемент abc, тогда вы действительно должны иметь свои URL без параметров запроса и использовать вместо этого концепцию маршрутов

т.е. вместо http://xxx/abc?id=10 для отображения элемента abc с идентификатором 10 у вас должен быть маршрут http://xxx/abc/10

Затем вы добавите этот маршрут как:

 { path: 'abc/:id', component: abcComponent },

где abcComponent - это компонент, который показывает соответствующий элемент

0 голосов
/ 30 апреля 2018

Как сказал @vogomatix, у вас не должно быть одного и того же параметра с разными именами. Но, если по какой-либо причине вы делаете это, вы можете немного упростить свой код следующим образом:

private findQueryParams() {
    this._route.queryParams.subscribe((params: Params) => {
        const idValue = params['id'] || params['Id'] || '0';
        let id = Number(idValue);
    });
}

Таким образом, вы будете использовать значение id, если не существует, тогда Id, а если не существует, то вы будете использовать '0'

Если, как вы говорите, комбинаций может быть больше, лучшим вариантом будет клонирование параметров в строчную версию:

function toLower(params: Params): Params {
    const lowerParams: Params = {};
    for (const key in params) {
        lowerParams[key.toLowerCase()] = params[key];
    }

    return lowerParams;
}

С этим:

private findQueryParams() {
    this._route.queryParams.subscribe((params: Params) => {
        const _params = toLower(params);
        const idValue = params['id'] || '0';
        let id = Number(params);
    });
}

Конечно, вы получаете это каждый раз, когда получаете параметры от Router, но это неизбежно, так как базовый дефект в системе Url.

...