Angular - ngAfterViewChecked выполняет код, но только один раз - PullRequest
0 голосов
/ 18 февраля 2020

Я загружаю карусель с веб-страницами. Я хочу получить параметр и перейти к слайду с каруселью, представляющему нужную страницу (например, глубокую ссылку). Мы все видели что-то вроде этого ... нужный элемент страницы правильно инициализирован (pageTurner), но когда я go для «selectSlide», визуальный элемент не полностью реализован, и слайд не двигается.

Чтобы исправить это, я попытался переместить свой код в ngAfterViewChecked, но потом он выполнялся каждый раз, когда я впоследствии вручную поворачивал карусель, что было бы очень плохо, но по крайней мере это работало с нагрузкой. Однако, когда я обернул этот код в булеву проверку для одноразового выполнения (if (loadComplete == false) {}), он вообще перестал работать в ngAfterViewChecked, что действительно сбивало с толку. Код выполнен, но функция больше не работает.

Мое временное решение - ждать 500 миллисекунд для вызова функции из ngOnIt, и это работает, но должен быть лучший способ дождаться визуального элемента готов и действует только один раз при загрузке ...

export class Carousel implements OnInit {

  @ViewChild(CarouselComponent, {static: true}) pageTurner : CarouselComponent;

  slide: any;
  loadingComplete: boolean = false;

  constructor(private activatedroute:ActivatedRoute) { }

  ngOnInit() {
    this.activatedroute.data.subscribe(data => {
      if (data.slide != undefined) {
        this.slide=data.slide;
        setTimeout(() => this.gotoPage(this.slide), 100);
      }
    })
}

gotoPage(index) {
    this.pageTurner.selectSlide(index);
  }

}
...