角线如何激活路线?

时间:2019-07-06 15:54:41

标签: angular

我的网址: http://xx.xx.xxx.xxx:xxxx/#/Test?name=7779394

如何获取“ 7779394”?

我尝试了以下代码:

  this.activatedRoute.queryParams.subscribe(params => {
  this.ind = params.name;

  console.log("this.ind " + params.name);

});

但是结果首先是未定义的,在未定义的函数再次运行后,我得到了7779394

但是它只能运行一次。

我该如何解决?

2 个答案:

答案 0 :(得分:0)

尝试:-

如果URL中没有“名称”,则有时预订queryParams可能会提供undefined值。可能是由于在调用api之前未定义它。 这是自然而然的事情,BehaviourSubject

您可以使用filter来避免未定义的值。

constructor(public route: ActivatedRoute){}
ngOnInit() {
 const self = this;
this.route.queryParams.filter(params => params['name'] ).distinctUntilChanged().subscribe(params => {
self.nameVar= params['name']
 });

this.route.queryParams.filter(params => params['name'])
.subscribe(params => {     
   self.nameVar = params['name'];
});

答案 1 :(得分:-1)

这是一种RxJs问题。

您要做的是过滤可观察对象。

import { map, filter } from 'rxjs/operators';

this.activatedRoute.queryParams
  .pipe(
    map(params => params.name), // query only the name...
    filter(name => name !== undefined), // and filter it! (not to be undefined)
  )
  .subscribe(name => {
    // name will be real value(not undefined)
    this.ind = name;
    console.log("this.ind " + name);
  });

或者如果您需要完整的params对象...

import { filter } from 'rxjs/operators';

this.activatedRoute.queryParams
  .pipe(
    filter(params => params.name !== undefined), // params is always an object, so you don't have to check (params !== undefined).
  )
  .subscribe(params => {
    // params.name will be real value(not undefined)
    this.ind = params.name;
    console.log("this.ind " + params.name);
  });