首页 > 解决方案 > 订阅的生命周期

问题描述

所以,我有一个像

class DialogLoginComponent {
    constructor(
        private dialogRef: MatDialogRef<DialogLoginComponent>,
        private store: Store<Auth.State>
    ) {}

    onDoSomething(): void {
        this.dialogRef.close(); 

        this.dialogRef.afterClosed().subscribe(() =>
            this.store.dispatch(new RegistrationActions.OpenRegistrationDialog())
        );
    }
}

问题是,一旦组件被销毁,订阅是否仍然有效,或者 Angular / RxJS 是否足够智能以自动取消订阅?

标签: angularrxjs

解决方案


不,订阅仍然有效,除非您:
- 在unsubscribe()某处取消订阅,可能在 ngDestroy 中?但这不推荐,请参阅https://medium.com/@benlesh/rxjs-dont-unsubscribe-6753ed4fda87
- 使用first()ortake(1)这样您将确保订阅将完成并且在获得第一个结果后不会继续存在


推荐阅读