微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – router.navigate with query params Angular 5

我遇到了使用查询参数路由到路由的问题我有这样的功能

goToLink(link) {
    this.router.navigate([`${link.split('?')[0]}`, { queryParams: this.sortParams(link)}]);
}

和这个功能

sortParams(link) {
    let queryParams = url.split('?')[1];
    let params = queryParams.split('&');
    let pair = null;
    let data = {};
    params.forEach((d) => {
      pair = d.split('=');
      data[`${pair[0]}`] = pair[1];
    });
    return data;
}

好吧基本上发生了什么我有一个名为goToLink()的函数,它接受一个url,传递的url是一个带有查询参数的字符串,如此…

https://website.com/page?id=37\u0026amp;username=jimmy

以上只是一个不是它实际看起来的例子,但它现在是一个带有查询参数的链接字符串所以发生的事情是我从字符串中删除params并将它们存储在sortParams()函数的数据对象中,所以当我通过我上面的字符串得到一个看起来像这样的对象

{id:37,用户名:’jimmy’}

在这就是我传递给router.navigate中的queryParams:部分,

返回对象时,该函数应如下所示

this.router.navigate([`${link.split('?')[0]}`, { queryParams: {id: 37, username: 'jimmy'}}]);

所以我成功路由到所需的路线,但查询参数看起来像这样..

/ page; queryParams = [object Object]

在这里做错了什么?

任何帮助,将不胜感激!

编辑

如果我只是将功能更改为此

 this.router.navigate([`${link.split('?')[0]}`, { queryParams: {id: 37, username: 'jimmy'}}]);

我得到相同的url / page; queryParams = [object Object]

解决方法:

你可以放置一个据说是第一个参数的支架,但是你把它封装在整条路线上

你的代码

// This is the end of your route statement:  '}}]);' which the close bracket is included
this.router.navigate([`${link.split('?')[0]}`, { queryParams: {id: 37, username: 'jimmy'}}]);

更新路线:

将close括号放在第一个参数中,尽量不要将它放在route语句的最后一部分.

// Update end line: '}});'
this.router.navigate([`${link.split('?')[0]}`], { queryParams: {id: 37, username: 'jimmy'}});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐