Как скрыть модальный ngx-bootstrap без разрушения модального компонента? - PullRequest
0 голосов
/ 09 октября 2019

Есть ли способ скрыть BsModal, не разрушая модальный компонент? Чего я хотел бы добиться, так это то, что, как только модальное изображение показывается в первый раз, MyComponent не воссоздает каждый раз, когда скрывается / отображается снова. Как только он будет собран, первый раз - это просто показать пользователю или нет, а не перестраивать весь компонент.

Мне это нужно, потому что я хотел бы предоставить услугу в провайдерах MyComponent, и я ожидаю того же экземпляра этой службы, если я закрою и снова открою модальное.

У меня есть компонент:

@Component({
  selector: 'my-component',
  template: '<p>Hi from my component</p>'
})
export class MyComponent implements OnInit {

  ngOnInit(): void {
    console.log('want to show this message only once');
  }
}

Я использую модальный ngx-bootstrap, чтобы показать этот компонент

export class AnotherComponent() {

  private modalRef: BsModalRef;

  constructor(private modalService: BsModalService) {}

  showModal(): void {
    this.modalService.show(MyComponent);
  }

  hideModal(): void {
    this.modalRef.hide();
  }
}

Я бы хотел, чтобы ngOnInit () выполнялся только при первом открытии модального окна.

1 Ответ

0 голосов
/ 09 октября 2019

Итак, то, что вы хотите, может оказаться невозможным до тех пор, пока средство визуализации Ivy не будет запущено (см. https://github.com/angular/angular/issues/19812).. Текущий модуль визуализации использует либо TemplateRef, либо ссылку на компонент для создания содержимого для динамически создаваемого компонента (см. https://angular.io/guide/dynamic-component-loader). Каждый раз, когда это выполняется, компонент / шаблон переинициализируется.

Это не проблема. Если у вас есть какой-то фрагмент статических данных, сохраните их в одноэлементной службе(службы, использующие {providedIn: "root"}), а затем при инициализации компонента извлекают эти данные из компонента. Ngx-bootstrap использует тот же код, который Angular использует для создания компонентов во время выполнения. Это не снижение производительности при повторном запускекомпонент, если вы не делаете что-то тяжелое на этапе инициализации. Если вы это делаете, выгрузите это в службу и извлекайте результаты каждый раз при создании компонента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...