我有以下代码:
this.isUsingGoogleTwoFactor$ = this.user$.pipe(map((user: User) =>
user.isUsingGoogleTwoFactor));
现在,我要向isUsingGoogleTwoFactor$
发送新值。我知道我无法使用observables
来做到这一点,但我应该使用subjects
。但是我不知道该如何使用管道。
谢谢!
答案 0 :(得分:3)
选中BehaviourSubject。这种Observable可以使您推送新值并跟踪其发出的最后一个值。
如何使用它的一个示例是在我链接的那个站点中。简而言之,这就是您的用法:
const observable = new BehaviorSubject("initial value");
如果此时订阅者出现并执行:
observable.subscribe({
next: (value) => console.log("The value is: ", value)
});
然后输出将是:
The value is: initial value
此后,每次您调用next
时,所有订阅者都会收到通知:
observable.next("a new value");
将在订户中打印此内容:
The value is: a new value
答案 1 :(得分:1)
如果我对状态的理解正确,那么您希望此可观察值既可以在用户$的更改时触发,也可以在您手动触发时触发。然后,您可以采用这种方法。
import { merge, Subject } from 'rxjs';
...
const manuallyTriggered$ = new Subject();
const triggeredFromUser$ = this.user$.pipe(
map((user: User) => user.isUsingGoogleTwoFactor)
);
this.isUsingGoogleTwoFactor$ = merge(manuallyTriggered$, triggeredFromUser$);
当您要手动触发它时:
manuallyTriggered$.next(true);