iam*_*015 10 javascript rxjs angular
我有以下代码:
this.isUsingGoogleTwoFactor$ = this.user$.pipe(map((user: User) =>
user.isUsingGoogleTwoFactor));
Run Code Online (Sandbox Code Playgroud)
现在我想要的是向 发出新值isUsingGoogleTwoFactor$。我知道我不能这样做,observables但我应该使用subjects. 但我不知道具体如何用管道来做。
谢谢!
检查BehaviourSubject。它是一种 Observable,允许您推送新值并跟踪它发出的最后一个值。
我链接的网站中有一个如何使用它的示例。但简而言之,这就是你如何使用它:
const observable = new BehaviorSubject("initial value");
Run Code Online (Sandbox Code Playgroud)
如果此时有订阅者到来并执行:
observable.subscribe({
next: (value) => console.log("The value is: ", value)
});
Run Code Online (Sandbox Code Playgroud)
那么输出将是:
The value is: initial value
Run Code Online (Sandbox Code Playgroud)
之后,每次调用时,next所有订阅者都会收到通知:
observable.next("a new value");
Run Code Online (Sandbox Code Playgroud)
将在订阅者中打印此内容:
The value is: a new value
Run Code Online (Sandbox Code Playgroud)
如果我理解正确的话,您希望这个可观察对象在 user$ 发生更改时以及您手动触发它时触发。那么你就可以采用这种方法。
import { merge, Subject } from 'rxjs';
...
const manuallyTriggered$ = new Subject();
const triggeredFromUser$ = this.user$.pipe(
map((user: User) => user.isUsingGoogleTwoFactor)
);
this.isUsingGoogleTwoFactor$ = merge(manuallyTriggered$, triggeredFromUser$);
Run Code Online (Sandbox Code Playgroud)
当你想手动触发它时:
manuallyTriggered$.next(true);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12135 次 |
| 最近记录: |