#javascript #angular #typescript #angular-material #mat-dialog
#javascript #угловой #typescript #angular-материал #mat-диалог
Вопрос:
В моем приложении есть кнопка, которая открывает компонент в MatDialog. В компоненте я выполняю вызовы API. При закрытии MatDialog он будет уничтожен.
Когда я открываю MatDialog во второй раз по нажатию кнопки, мне приходится снова выполнять эти вызовы api, потому что первый экземпляр был уничтожен.
Я ищу решение, при котором мой первый экземпляр MatDialog не будет уничтожен, и мне не нужно выполнять вызовы api каждый раз, когда я нажимаю на кнопку.
Мой код выглядит так:
this.dialogBox = this.dialog.open(FilterModal, {
data: { filters: this.dataFilters, filtersjson: this.filtersjson },
width: '300px',
height: 'calc(100vh - 120px)',
panelClass: 'custom-modalbox',
hasBackdrop: false,
position: { top: '120px', right: '0px' }
});
this.dialogBox.afterClosed().subscribe(res => {
if (res) {
// function();
} else {
// function2();
}
});
Комментарии:
1. Вместо этого, почему бы вам не кэшировать запрос API с помощью
shareReplay
operator .?2. кэш не решит мою проблему. У меня есть выпадающий список в моем компоненте, в котором есть поиск ввода. Каждый раз, когда пользователь вводит, вызывается search API, и ответ сохраняется в mat-options (при начальной загрузке я загружаю только 500 ответов. если я хочу увидеть параметры, превышающие 500, мне нужно создать API поиска). при закрытии matdialog он уничтожается, при открытии его во второй раз раскрывающийся список снова отображается и загружает результат top 500, но выбранное мной значение — это ответ от этого поискового API в первом экземпляре MatDialog. Поэтому, если уничтожение matdialog предотвращено, это будет полезно.
Ответ №1:
Вы можете сохранить данные в теме поведения, чтобы при повторном вызове диалогового окна вы могли получить старые данные с помощью .next .