Я использую Angular 6 с угловыми материалами.
В моем модале у меня есть:
<div style="display: flex; justify-content: space-between" >
<button color="primary" mat-button [mat-dialog-close]="false">Cancel</button>
<button color="primary" mat-button [mat-dialog-close]="gizmo">{{inEditMode === true ? "Save" : "Add"}}</button>
</div>
Таким образом, модальное значение будет возвращать либо false (если пользователь нажимает кнопку отмены), либо возвращает объект gizmo (если пользователь нажимает кнопку add).
В классе, который вызывает модал, у меня есть следующий код.
Когда я отлаживаю переменную x, она содержит объект gizmo. Однако, как только это завершится, x будет неопределен в подписке. Это почему? Разве х не должен содержать гизмо, как это было на карте?
addGizmo() {
let gizmo = new Gizmo();
this.tagSubject.next(gizmo);
let dialogEdit = this.dialog.open(DialogGizmo,
{
width: "300px",
data: { },
});
dialogEdit.afterClosed()
.pipe(map(x => {
if (x !== false) {
gizmo.value = x.GizmoValue;
gizmo.description = x.GizmoDescription;
}
}))
.subscribe(x => {
if (x !== undefined) {
this.dataCatalogService.addGizmo(gizmo)
.subscribe(
() => this.loadGizmos(),
error => this.handleError(error)
);
}
});
};