嗯,一切正常,但不像我预期的那样。当用户保存图像时,我正在尝试从组件A获取当前值,并通过服务(使用BehaviorSubject
共享该img并将其存储在组件B中。我知道我总是会得到当前值值,但我的目的是存储最后一个值并保存我想要的所有图像,而不仅仅是用最后一个值覆盖当前值。
当前问题:我总是只存储最后一张图像。 我的期望:存储所有图像
我试图使用Subject,ReplaySubject(1)而不是BehaviorSubject来只是不初始化值,或者尝试使用具有跳过运算符的BehaviorSubject来获取最后一个值。我真的不知道我在想什么。另外,我删除了ngOnDestroy()
只是为了知道是否要销毁整个变量,尽管这没有意义,因为我在获取值后将其存储。
// image-state.service
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class ImageStateService {
private imgStateSubject = new BehaviorSubject<string>('');
imageState$ = this.imgStateSubject.asObservable();
constructor() {
}
getImage(val: string) {
this.imgStateSubject.next(val);
}
}
//组分A的发射值
onSave(severity: string, data: string) {
this.confirmationService.confirm({
message: 'Are you sure that you want to save it in Gallery?',
accept: () => {
this.imageStateService.getImage(data); // Getting the value
this.messageService.add({ severity: severity, summary: 'Success', detail: 'Data Saved' });
}
});
}
//接收值(组分B)
images: Image[];
subscription: Subscription;
constructor(private imageStateService: ImageStateService) { }
ngOnInit() {
this.images = [];
this.subscription = this.imageStateService.imageState$
.subscribe(val => this.images.push
({source: `${val}`, alt: 'Description for Image 1', title: 'Title 1'}));
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
答案 0 :(得分:-1)
BehaviorSubject
仅存储当前(最后)值。看看ReplaySubject
,您可以指定要保留在其中的缓冲区。
您可以使用运算符shareReplay
将缓冲区添加到任何流中以存储值。
http://reactivex.io/rxjs/manual/overview.html#replaysubject https://www.learnrxjs.io/operators/multicasting/sharereplay.html