Angular2 CanDeactivate с асинхронной наблюдаемой

Я смотрю на охрану и пытаюсь предотвратить навигацию с помощью CanDeactivate. Я хочу показать простой модал с помощью кнопки "Сохранить / Отмена", "Сохранить = навигация" и "Хорошо", "Отмена = Отмена"

У меня CanDeactivate работает, но кажется, что он не решен в нужное время

Guard.ts

canDeactivate(component: PortfolioModelComponent) {
    component.saveChanges(); // Opens modal
    return component.modalResponse.take(1); // isnt happening at the right time
}

Component.ts

 public modalResponse: Observable<boolean> = new Observable((observer) => { });

public saveChanges() {
    this.openSaveChangeModal();
}

// Modal save changes
public openSaveChangeModal() {
    $('#savePortfolioChangesModal').modal();
}

public closeSaveChangesModal() {
     this.modalResponse = new Observable((observer) => {
        observer.next(false);
    });
    $('#savePortfolioChangesModal').modal('hide');
}

public saveSaveChangesModal() {
    this.modalResponse = new Observable((observer) => {
        observer.next(true);
    });
    $('#savePortfolioChangesModal').modal('hide');
}

При первом "Сохранить" ничего не происходит после показа модала. На втором "Сохранить" навигация произойдет, прежде чем я отвечу модальной. Как я могу решить это в нужное время?

0 ответов

Другие вопросы по тегам