【问题标题】:How to get the optional query parameters in Angular2? [duplicate]如何获取Angular2中的可选查询参数? [复制]
【发布时间】:2016-08-29 09:35:07
【问题描述】:

这是我要处理的 URL http://localhost/?id=120&lang=en&search=abc

如何读取这些参数(id、lang 和 search)。

【问题讨论】:

    标签: angular


    【解决方案1】:

    您必须使用来自@angular/router 的ActivatedRoute,就像任何其他参数一样,与非可选参数没有区别。

    更多信息: https://angular.io/docs/ts/latest/guide/router.html#!#optional-route-parameters

    【讨论】:

    • 感谢您的回答。但是在导入 ActivatedRoute 时,它​​显示模块 '"/var/www/public/node_modules/@angular/router/index"' 没有导出成员 'ActivatedRoute' 的编译时错误。
    • 你没有指定什么版本,ActivatedRoute只有RC5才有,
    • 如何在 RC1 中获得这个?
    【解决方案2】:
    export class HeroComponent implements OnInit {
      constructor(private _activatedRoute: ActivatedRoute, private _router:Router) {
        _router.routerState.queryParams.subscribe(
          data => console.log('queryParams', data['st']));
    

    另见Get route query params

    【讨论】:

    • 我猜最终版本是 ActivatedRoute。但是,如何获得可选参数?例如如果lang 设置为宠物查询字符串,请使用它,否则回退到英文。据我所知,无法确定当前订阅是否已针对此页面完成,这意味着如果它不存在,它将永远等待。 (可能是 RxJs 超时?)
    • 您可以订阅route.queryParams()。 AFAIK 传递给subscribe() 的回调将在每次路由更改时被调用,当路由上没有?someid=value;someid=value 时,data['someId'] 将返回null
    • 非常感谢,这很有用!
    • route.queryParams() 似乎只在查询部分发生变化时才被调用。例如,假设我有一个 url /cats/:page?pagesize=x 如果我导航到下一页,但没有更改页面大小,则不会调用回调。当我有route.paramsroute.queryParams 并且想要根据两者调用rest API 时,这是一个问题。通常我会将它们压缩在一起,但如果我对route.queryParams 的“回调”可能会或可能不会被调用,那么我仍然需要超时。
    • 您可以将其报告为错误,或者订阅router.events (stackoverflow.com/questions/35912932/…) 并从_activatedRoute.routerState 读取值。 AFAIR 还有一个问题是这些值仅在超时后可用(抱歉不记得确切)我认为这是一个开放票证的已知问题。
    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 2021-10-25
    • 2013-11-14
    • 2020-06-26
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多