如何设置ActivateRouter只运行一次?

时间:2019-07-05 19:36:19

标签: angular

我尝试在url中以字符串形式获取数据,并且尝试使用activatedRoute来完成任务

这是我的应用程序组件:

  this.activatedRoute.queryParams.subscribe((value)=>{
    this.id=parseInt(value['name']);

    this.userId = this.id;

  });

console.info(this.id)之后:NaN->'12345678'

但是我只需要'12345678'T_T

也许需要设置一些超时时间?

我尝试将(this.id)推入数组,我以为我可以做array [1]:NaN,array [2]:'12345678'但失败。

3 个答案:

答案 0 :(得分:1)

您在这里:

this.id = parseInt(this.activatedRoute.snapshot.queryParams.name);

答案 1 :(得分:0)

我猜这是在ngOnInit中设置的。如果视图发生更改或数据发生更改,它将多次运行...并且可能还有其他原因。我建议检查id,然后拨打电话。另外,如果您不想在以后查找数据更改,请取消订阅。

if (!this.id) {
    this.activatedRoute.queryParams.subscribe((value) => {
        this.id = parseInt(value['name']);

        this.userId = this.id;

    }).unsubscribe();
}

答案 2 :(得分:0)

如果确实只需要第一个值,也可以使用first()运算符来实现。否则,请使用filter()

this.activatedRoute.queryParams
.pipe(
    first((value) => value['name'] && value['name'].length > 0)
)
.subscribe((value) => {
    this.id = parseInt(value['name']);

    this.userId = this.id;
});