当前位置:  开发笔记 > 编程语言 > 正文

如何处理角度2中的查询参数

如何解决《如何处理角度2中的查询参数》经验,为你挑选了6个好方法。

在我的routable component

@RouteConfig {
  {path: '/login',   name: 'Login', component: LoginComponent}
}  

但是,如果我去,如何获得查询参数app_url/login?token=1234



1> Jayantha Lal..:

RouteParams现已弃用,所以这里是如何在新路由器中执行此操作.

this.router.navigate(['/login'],{ queryParams: { token:'1234'}})

然后在登录组件中,您可以获取参数,

constructor(private route: ActivatedRoute) {}
ngOnInit() {
    // Capture the token  if available
    this.sessionId = this.route.queryParams['token']

}

这是文档


为了让这个工作我必须这样做.route.snapshot.queryParams ...

2> Thierry Temp..:

为了补充前两个答案,Angular2支持路由中的查询参数和路径变量.在@RouteConfig定义中,如果在路径中定义参数,Angular2会将它们作为路径变量处理,如果不是,则将其作为查询参数处理.

我们来看一个例子:

@RouteConfig([
  { path: '/:id', component: DetailsComponent, name: 'Details'}
])

如果你这样调用navigate路由器的方法:

this.router.navigate( [
  'Details', { id: 'companyId', param1: 'value1'
}]);

您将拥有以下地址:/companyId?param1=value1.获取参数的方法对于查询参数和路径变量都是相同的.它们之间的区别在于路径变量可以看作是必需参数,查询参数可以看作是可选参数.

希望它对你有帮助,蒂埃里

更新:路由器alpha.31更改后,http查询参数不再有效(Matrix params#2774).相反,角度路由器使用所谓的Matrix URL表示法.

参考https://angular.io/docs/ts/latest/guide/router.html#!#optional-route-parameters:

可选的路由参数不以"?"分隔 和"&",因为它们将在URL查询字符串中.它们用分号分隔";" 这是矩阵URL表示法 - 您可能以前从未见过的.


我好几个小时都在找这个!但它不能像那样工作,URL应该看起来像这样`/ companyId; param1 = value1; param2 = value2`.无论如何,谢谢你以正确的方式指出我,如果我是对的,你可以更新你的答案.
为什么他们使用矩阵URL表示法以及如何切换回来.这会产生发送包含/,+和=符号的参数的问题
我讨厌投票,但这个优秀的答案需要更新.

3> Stephen..:

似乎RouteParams不再存在,并被替换为ActivatedRoute.ActivatedRoute让我们访问矩阵URL表示法参数.如果我们想要获取查询字符串?参数,我们需要使用Router.RouterState.在传统的查询字符串PARAMATERS跨路由持久,这可能不是所期望的结果.现在,在路由器3.0.0-rc.1中保留片段是可选的.

import { Router, ActivatedRoute } from '@angular/router';
@Component ({...})
export class paramaterDemo {
  private queryParamaterValue: string;
  private matrixParamaterValue: string;
  private querySub: any;
  private matrixSub: any;

  constructor(private router: Router, private route: ActivatedRoute) { }
  ngOnInit() {
    this.router.routerState.snapshot.queryParams["queryParamaterName"];
    this.querySub = this.router.routerState.queryParams.subscribe(queryParams => 
      this.queryParamaterValue = queryParams["queryParameterName"];
    );

    this.route.snapshot.params["matrixParameterName"];
    this.route.params.subscribe(matrixParams =>
      this.matrixParamterValue = matrixParams["matrixParameterName"];
    );
  }

  ngOnDestroy() {
    if (this.querySub) {
      this.querySub.unsubscribe();
    }
    if (this.matrixSub) {
      this.matrixSub.unsubscribe();
    }
  }
}

我们应该能够操纵?导航时的符号以及;符号,但我只能使矩阵表示法工作.连接到最新路由器文档的plnker显示它应该如下所示.

let sessionId = 123456789;
let navigationExtras = {
  queryParams: { 'session_id': sessionId },
  fragment: 'anchor'
};

// Navigate to the login page with extras
this.router.navigate(['/login'], navigationExtras);


由于这个答案,得到了传统的查询参数.Matrix符号在Hotmail中存在问题.如果您需要向用户发送激活链接(使用params),Hotmail将对分号进行编码,从而破坏URL.

4> brando..:

这对我有用(从Angular 2.1.0开始):

constructor(private route: ActivatedRoute) {}
ngOnInit() {
  // Capture the token  if available
  this.sessionId = this.route.snapshot.queryParams['token']

}



5> Wetteren Rém..:

(仅适用于儿童路线,例如/ hello-world)

在这种情况下,您想拨打这种电话:

/ hello-world?foo = bar&fruit = banana

Angular2不使用也不; 代替。因此正确的网址应为:

/ hello-world; foo = bar; fruit = banana

并获取这些数据:

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

private foo: string;
private fruit: string;

constructor(
  private route: ActivatedRoute,
  private router: Router
  ) {}

ngOnInit() {
  this.route.params.forEach((params: Params) => {
      this.foo = params['foo'];
      this.fruit = params['fruit'];
  });
  console.log(this.foo, this.fruit); // you should get your parameters here
}

来源:https : //angular.io/docs/ts/latest/guide/router.html


Angular2使用“;”(矩阵参数语法)作为子路由的查询参数,使用“?”作为根路由的查询参数。

6> marcel..:

Angular2 v2.1.0(稳定):

ActivatedRoute提供了一个可以观察的订阅。

  constructor(
     private route: ActivatedRoute
  ) { }

  this.route.params.subscribe(params => {
     let value = params[key];
  });

每当路由更新时,这也会触发:/ home / files / 123-> / home / files / 321

推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有