- 已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
6小时前关门了。
截至5小时前,社区正在审查是否重新讨论此问题。
Improve this question
我有一个在父模板中由ngIf
切换的组件。在组件构造函数中,我订阅了一个zip
,当2个可观察对象发出数据时,它将触发。
该组件中还有一个函数,用于创建user
和session
,这两个函数都更新user$
和session$
可观察值:
export class CreateSessionComponent implements OnDestroy {
private x: Subscription;
constructor(
private sessionService: SessionService,
private userService: UserService
) {
this.x = zip(this.userService.user$, this.sessionService.session$)
.pipe(filter((data) => !!data[0]))
.subscribe({
next: (data) => console.log(data),
});
}
public createUserAndSession(): void {
this.sessionService.createSession();
this.userService.createUser();
}
ngOnDestroy(): void {
this.x.unsubscribe;
console.log('destroy');
}
}
当我第一次添加会话时,一切都按预期工作,但是当我第二次打开create-session
组件时,我首先从zip中获得订阅中的前一个结果,当我添加另一个会话时,订阅被触发两次。
https://stackblitz.com/edit/angular7-rxjs-5pd12h
1条答案
按热度按时间vltsax251#
我最终使用
take(1)
取消订阅可观察对象,并通过将user$
和session$
设置为null修复了“组件加载时zip触发”,这样zip
就过滤掉了结果,什么也不会发生:我想是因为我在
session$
和user$
上使用了behaviorSubject
,所以当create-session
组件加载时,它们会发出它们的最后一个值。通过将它们设置为null,它们仍然会发出,但会发出一个空值。