小编典典

如何从 Angular 2 中的 url 获取查询参数?

all

我使用 angular2.0.0-beta.7。当一个组件被加载到一个路径上时,就像/path?query=value1它被重定向到/path.
为什么要删除 GET 参数?如何保存参数?

我在路由器中有错误。如果我有一条主要路线

@RouteConfig([
  {
      path: '/todos/...',
      name: 'TodoMain',
      component: TodoMainComponent
  }
])

我的孩子路线像

@RouteConfig([
  { path: '/', component: TodoListComponent, name: 'TodoList', useAsDefault:true },
  { path: '/:id', component: TodoDetailComponent, name:'TodoDetail' }
])

那么我无法在 TodoListComponent 中获取参数。我能够得到

params("/my/path;param1=value1;param2=value2")

但我想要经典

query params("/my/path?param1=value1&param2=value2")

阅读 126

收藏
2022-05-12

共1个答案

小编典典

通过注入ActivatedRouteone 的实例可以订阅各种 observable,包括 aqueryParams和 a
paramsobservable:

import {Router, ActivatedRoute, Params} from '@angular/router';
import {OnInit, Component} from '@angular/core';

@Component({...})
export class MyComponent implements OnInit {

  constructor(private activatedRoute: ActivatedRoute) {}

  ngOnInit() {
    // Note: Below 'queryParams' can be replaced with 'params' depending on your requirements
    this.activatedRoute.queryParams.subscribe(params => {
        const userId = params['userId'];
        console.log(userId);
      });
  }

}

关于退订的说明

@Reto 和 @codef0rmer
非常正确地指出,根据官方文档,在这种情况下unsubscribe(),组件内部onDestroy()方法是不必要的。这已从我的代码示例中删除。(请参阅本教程中的蓝色警报框)

2022-05-12