Привет, я пытаюсь связать следующие подписки.
changeBranch() {
const bottomSheetRef: MatBottomSheetRef = this.bottomSheet.open(CCSBranchComponent, {
data: this.branches
});
this.subscription.add(bottomSheetRef.instance.change.subscribe((branch: Branch) => {
this.branchInfo = `Description : ${branch.author}\nAuthor : ${branch.id}\nCreated date :${branch.created}`;
this.blockpointBranchForm.get('branch').setValue(branch.id);
}));
this.subscription.add(bottomSheetRef.afterDismissed().subscribe(() => {
this.returnSelectedBranch.emit(this.blockpointBranchForm.get('branch').value);
}));
}
Здесь, если дноSheetRef.instance.change.subscribe вызывается до загрузки листа, он выдает неопределенное значение. Итак, я пытаюсь реализовать что-то похожее на это
this.subscription.add(this.bottomSheet.open(CCSBranchComponent, {
data: this.branches
}).instance.change.subscribe((branch: Branch) => {
this.branchInfo = `Description : ${branch.author}\nAuthor : ${branch.id}\nCreated date :${branch.created}`;
this.blockpointBranchForm.get('branch').setValue(branch.id);
}).afterDismissed().subscribe(() => {
this.returnSelectedBranch.emit(this.blockpointBranchForm.get('branch').value);
}));
Здесь вторая подписка вызывается при возврате подписки первой. Как получить доступ к наблюдаемому в цепочке?
Вы не связываете подписки, подписка является конечным потребителем. Вы связываете потоки.
Я думаю, вы хотите связать действия, которые выполняются при подписке.
Вы можете достичь этого,
bottemsheetRef.instance.change.pipe(
switchmap(resultFromChange => bottomSheetRef.afterDismissed
).subsbribe(resultFromAfterDismissed => {// do whatever you like})
Subscription.add не объединяет события, он просто добавляет подписку для ее последующего выпуска, например. onNgDestroy, чтобы избежать утечек памяти. Если вы хотите создать поток событий, вы должны использовать оператор rxjs, например. mergeMap, switchMap, в зависимости от вашего варианта использования.