我不清楚 Subject
和 BehaviorSubject
之间的区别。仅仅是 BehaviorSubject
有 getValue()
功能吗?
原文由 Mike Jerred 发布,翻译遵循 CC BY-SA 4.0 许可协议
我不清楚 Subject
和 BehaviorSubject
之间的区别。仅仅是 BehaviorSubject
有 getValue()
功能吗?
原文由 Mike Jerred 发布,翻译遵循 CC BY-SA 4.0 许可协议
测试所有 4 种主题类型的程序: 主题、行为主题、重播主题和异步主题
// 1. Subject - only value after subscribed
var subject = new Subject();
subject.next(1);
subject.next(2);
subject.complete();
subject.subscribe(
(data) => this.log("Subject="+data),
(error) => this.log(error),
() => this.log('Complete Subject')
);
subject.next(3);
subject.next(4);
// 2. BehaviorSubject - only last value before subscribed and all after subscription
// calls on initalization, mandatory to specify a value
var subjectb = new BehaviorSubject<any>(5);
subjectb.next(1);
subjectb.next(2);
subjectb.complete();
subjectb.subscribe(
(data) => this.log("Behavior="+data),
(error) => this.log(error),
() => this.log('Complete Behavior')
);
// 3. ReplaySubject - all specified last values before subscribed and all after subscription
// Does not call on initalization, no default value
var subjectr = new ReplaySubject(5);
subjectr.next(1);
subjectr.next(2);
subjectr.complete();
subjectr.subscribe(
(data) => this.log("Replay="+data),
(error) => this.log(error),
() => this.log('Complete Replay')
);
// 4. AsyncSubject - only last values before calling complete
var subjecta = new AsyncSubject();
subjecta.next(1);
subjecta.next(2);
subjecta.complete();
subjecta.subscribe(
(data) => this.log("Async="+data),
(error) => this.log(error),
() => this.log('Complete Async')
);
https://stackblitz.com/edit/example-rxjs-subject-e8vj9y?embed=1&file=app/app.component.ts
原文由 Sameer Jadhav 发布,翻译遵循 CC BY-SA 4.0 许可协议
一个 BehaviorSubject 拥有一个值。当它被订阅时,它会立即发出值。主题不包含值。
主题示例(使用 RxJS 5 API):
控制台输出将为空
行为主体示例:
控制台输出:1
此外:
BehaviorSubject
应该使用初始值创建:新的Rx.BehaviorSubject(1)
ReplaySubject
。