我的网址: 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
但是它只能运行一次。
我该如何解决?
答案 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);
});