我有一个ModalControllerService,它有一个observable可以从Modal返回一个值。 当我只有一个组件在一个页面中打开一个模态时,这个工作很好,但是当我在同一个页面中有多个组件时,所有订阅者都在同一时间订阅。
我要做些什么来避免这种情况,有一种方法来区分订阅者的每个订阅?
@Injectable()
export class ModalControllerService {
private modalStack: ModalStackObject[] = [];
private afterDismissObservable = new Subject<any>();
onAfterDismiss$ = this.afterDismissObservable.asObservable();
public get lastModal() {
return this.modalStack[this.modalStack.length - 1];
}
close(model?: any) {
if (this.modalStack && this.modalStack.length > 0) {
this.lastModal.component.dismiss()
.then(() => {
this.afterDismissObservable.next(model);
this.modalStack.pop();
});
}
}
}
@Component({
...
});
export class SomeComponent {
private modalSubscription: Subscription;
value: any;
constructor(modalCtrl: ModalControllerService){
this.modalSubscription = this.modalCtrl.onAfterDismiss$.subscribe(result => {
this.value = result;
});
}
ngOnDestroy(){
this.modalSubscription.unsubscribe();
}
}
答案 0 :(得分:0)
我相信这是因为您的组件正在同时进行初始化。组件初始化时,默认构造函数运行。这对你来说可能是一个问题。我不能说太多,但你可以做的是你可以在任何自定义函数中包装onAfterDismiss $ .subscribe()
例如。点击按钮的功能。
<强>组件-1 强>
constructor(modalCtrl: ModalControllerService){
this.modalSubscription = this.modalCtrl.onAfterDismiss$.subscribe(result => {
this.value = result;
});
}
<强>组件-2 强>
constructor(modalCtrl: ModalControllerService){}
click(){ // it will subscribe to the observable when button is clicked.
this.modalSubscription = this.modalCtrl.onAfterDismiss$.subscribe(result => {
this.value = result;
});
}
}