当我的 angular 组件中的可观察对象完成时,什么也没有发生
nothing happens when the observable is completed in my angular component
在我的 Angular 组件中,我有这个
ngOnInit(): void {
this.route.paramMap
.pipe(
tap(item=>console.log(item))
)
.subscribe(
params => {
const proyectoId = params.get('proyectoId');
this.empleadoId = +params.get('empleadoId');
}
,err=>console.log(err)
,()=>{
console.log('Hola');
}
);
}
但是当我调试时,我没有看到 console.log
有什么想法吗?
谢谢
从 Angular 的 ActivatedRoute#paramMap
返回的 observable 是永久的,除非明确关闭。如果你只想使用第一个发射(在大多数理想情况下它应该足够 paramMap
),你可以输入一个 take(1)
。它会在第一次发射后关闭 observable。
this.route.paramMap.pipe(
take(1)
tap(item => console.log(item)),
).subscribe(
...
);
就是说,如果您不能使用 take(1)
,最好在组件的 ngOnDestroy()
挂钩中关闭此类可观察对象。它将确保在组件关闭后打开的可观察对象不会发生内存泄漏。有关详细信息,请参阅 here。
在我的 Angular 组件中,我有这个
ngOnInit(): void {
this.route.paramMap
.pipe(
tap(item=>console.log(item))
)
.subscribe(
params => {
const proyectoId = params.get('proyectoId');
this.empleadoId = +params.get('empleadoId');
}
,err=>console.log(err)
,()=>{
console.log('Hola');
}
);
}
但是当我调试时,我没有看到 console.log
有什么想法吗?
谢谢
从 Angular 的 ActivatedRoute#paramMap
返回的 observable 是永久的,除非明确关闭。如果你只想使用第一个发射(在大多数理想情况下它应该足够 paramMap
),你可以输入一个 take(1)
。它会在第一次发射后关闭 observable。
this.route.paramMap.pipe(
take(1)
tap(item => console.log(item)),
).subscribe(
...
);
就是说,如果您不能使用 take(1)
,最好在组件的 ngOnDestroy()
挂钩中关闭此类可观察对象。它将确保在组件关闭后打开的可观察对象不会发生内存泄漏。有关详细信息,请参阅 here。