如何从区分大小写的查询参数变量中获取值?

时间:2018-04-30 10:00:42

标签: angular typescript queryparam

我有一个包含查询字符串 id 的网址。但是,变量 id 可以作为' id'或网址中的' Id'

根据我的理解,这两个将被区别对待。为了处理以下网址,我编写了代码,如附带的屏幕截图所示:

http://xxx/abc?id=10

http://xxx/abc?Id=10

enter image description here

除此之外,是否有任何简单的方法来处理区分大小写的变量并在angular4中正确获取值?

2 个答案:

答案 0 :(得分:1)

正如@vogomatix所说,你不应该有不同名字的同一个param。但是,如果你做了什么原因,你可以简单地将代码简化为:

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

这样您就可以使用id的值,如果不存在,则使用Id,如果不存在,那么您将使用{ {1}}

如果可以有更多组合,正如您所说,那么您最好的选择是将参数克隆为小写版本:

'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); }); } 获得参数时,你都会得到这个,但这是不可避免的,因为基本缺陷在于Url系统。

答案 1 :(得分:0)

如果您希望有一个显示特定abc项目的组件,那么您应该确实拥有没有查询参数的网址,而是拥抱路由的概念

即。而不是让http://xxx/abc?id=10显示ID为10的abc项,您应该只有一条路线http://xxx/abc/10

然后您将此路线添加为:

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

其中abcComponent是显示相关项

的组件