Ng-lazyload-image: Délais d'attente du rapporteur

Créé le 6 déc. 2016  ·  7Commentaires  ·  Source: tjoskar/ng-lazyload-image

Lors de l'exécution du test de rapporteur, ils expireront sur n'importe quel composant utilisant la directive de chargement paresseux. Le rapporteur surveille le ngZone pour savoir quand les appels xhr en attente, les délais d'attente et les intervalles sont terminés avant de s'exécuter.
Dans le scroll-listener.ts le .sampleTime(100, scheduler) crée un intervalle qui ne se terminera jamais lors d'un test de rapporteur. J'ai trouvé un moyen de contourner cela en ajoutant le code suivant à la directive

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();
        });
    });
  }

Selon ce https://github.com/angular/protractor/issues/3349#issuecomment -232253059 Le rapporteur surveille la ngZone principale, donc si nous exécutons l'intervalle, le rapporteur s'exécute avec succès. Je ne sais pas comment cela fonctionnerait avec les tests de rapporteur sur ce projet, mais je peux essayer de faire une pull request quand j'en ai l'occasion.

Commentaire le plus utile

Bien sûr, je vais voir si je peux en obtenir un dans la semaine prochaine :)

Tous les 7 commentaires

Merci pour vos commentaires.
Je ne peux cependant pas reproduire cela. J'utilise un rapporteur dans ce projet et cela semble bien fonctionner. Mais cela dit, il peut être judicieux d'utiliser ngZone.runOutsideAngular pour améliorer les performances. Mais si nous utilisons ngZone.runOutsideAngular , nous devons utiliser ChangeDetectorRef après avoir chargé l'image paresseux, n'est-ce pas ? Ainsi angulaire sait que la vue doit être restituée.

Comme je ne peux pas reproduire cela et il semble que vous ayez une solution qui fonctionne. Voulez-vous soumettre un PR?

Bien sûr, je vais voir si je peux en obtenir un dans la semaine prochaine :)

J'ai créé une nouvelle version du plugin. Pouvez-vous l'essayer : npm install [email protected] pour voir si cela résout le problème ?

Sûr! je vais l'essayer aujourd'hui

En fermant ça. Faites-moi savoir si vous obtenez toujours des délais d'attente.

@tjoskar vient de tester ça aujourd'hui et ça marche, merci pour le correctif ! :)

Cette page vous a été utile?
0 / 5 - 0 notes