У меня есть функция canDeactivate
, которая должна возвращать true
или false
.Это можно определить по результату вызова функции openConfirmDialog()
, которая открывает модальное диалоговое окно «подтверждение» ngx-bootstrap и ожидает ответа пользователя (что может привести к true
или false
).Вот код:
canDeactivate(component: ComponentCanDeactivate): boolean | Observable<boolean> {
// if there are no pending changes, just allow deactivation; else confirm first
return component.canDeactivate() ?
true :
this.openConfirmDialog();
}
openConfirmDialog() {
this.modalRef = this.modalService.show(ConfirmationComponent);
return this.modalRef.content.onClose.subscribe(result => {
console.log('results', result);
})
}
result
от подписки на this.modalRef.content.onClose
работает.Я могу успешно войти true
или false
.Когда результат становится либо true
, либо false
, как мне вернуть true
или false
в качестве значения canDeactivate
?Или я упускаю суть, и я должен делать вещи по-другому?
Мой ConfirmationComponent
выглядит следующим образом, который определяет onClose
как Observable<boolean>
(в частности, Subject<boolean>
), поэтомуЯ могу успешно вернуть логическое наблюдаемое, но как мне заставить canDeactivate
возвращать true
или false
всякий раз, когда openConfirmDialog
получает значение true
или false
?
@Component({
templateUrl: './confirmation.component.html'
})
export class ConfirmationComponent {
public onClose: Subject<boolean>;
constructor(private _bsModalRef: BsModalRef) {
}
public ngOnInit(): void {
this.onClose = new Subject();
}
public onConfirm(): void {
this.onClose.next(true);
this._bsModalRef.hide();
}
public onCancel(): void {
this.onClose.next(false);
this._bsModalRef.hide();
}
}