Ng-lazyload-image: Таймауты транспортира

Созданный на 6 дек. 2016  ·  7Комментарии  ·  Источник: tjoskar/ng-lazyload-image

При запуске теста транспортира они будут отключать любой компонент с помощью директивы отложенной загрузки. Protractor следит за ngZone, чтобы знать, когда ожидающие вызовы xhr, тайм-ауты и интервалы завершены перед запуском.
В scroll-listener.ts .sampleTime(100, scheduler) создает интервал, который никогда не заканчивается во время теста транспортира. Я нашел способ решить эту проблему, добавив следующий код в директиву

ngAfterContentInit() {
    this.ngZone.runOutsideAngular(() => { // run outside angular
      this.scrollSubscription = getScrollListener(this._scrollTarget)
        .filter(() => this.isVisible())
        .take(1)
        .switchMap(() => this.loadImage(this.lazyImage))
        .do(() => this.setImage(this.lazyImage))
        .finally(() => this.setLoadedStyle())
        .subscribe(() => this.ngOnDestroy(),
        error => {
          this.setImage(this.errorImg || this.defaultImg);
          this.ngOnDestroy();
        });
    });
  }

Согласно этому https://github.com/angular/protractor/issues/3349#issuecomment -232253059 Protractor наблюдает за основной ngZone, поэтому, если мы запустим интервал из нее, транспортир запустится успешно. Я не уверен, как это будет работать с тестами транспортира в этом проекте, но я могу попытаться сделать запрос на вытягивание, когда у меня будет возможность.

Самый полезный комментарий

Конечно, я посмотрю, смогу ли я получить его в течение следующей недели :)

Все 7 Комментарий

Спасибо за ваш отзыв.
Однако я не могу воспроизвести это. В этом проекте я использую транспортир, и он работает нормально. Но, сказав это, было бы неплохо использовать ngZone.runOutsideAngular для повышения производительности. Но если мы используем ngZone.runOutsideAngular , нам нужно использовать ChangeDetectorRef после ленивой загрузки изображения, верно? Angular знает, что представление нужно отрендерить заново.

Поскольку я не могу воспроизвести это, похоже, что у вас есть рабочее решение. Вы хотите отправить PR?

Конечно, я посмотрю, смогу ли я получить его в течение следующей недели :)

Я создал новую версию плагина. Можете ли вы попробовать: npm install [email protected] чтобы увидеть, решит ли это проблему?

Конечно! Я попробую сегодня

Закрытие этого. Дайте мне знать, если у вас все еще есть таймауты.

@tjoskar только что протестировал это сегодня, и он работает, спасибо за исправление! :)

Была ли эта страница полезной?
0 / 5 - 0 рейтинги