Ao executar o teste do transferidor, eles expirarão em qualquer componente usando a diretiva de carregamento lento. O transferidor observa o ngZone para saber quando chamadas xhr pendentes, tempos limite e intervalos são concluídos antes da execução.
Em scroll-listener.ts
o .sampleTime(100, scheduler)
cria um intervalo que nunca terminará durante um teste de transferidor. Eu encontrei uma maneira de contornar isso adicionando o seguinte código à diretiva
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();
});
});
}
De acordo com este https://github.com/angular/protractor/issues/3349#issuecomment -232253059 O transferidor observa o ngZone principal, portanto, se executarmos o intervalo fora dele, execute com êxito. Não tenho certeza de como isso funcionaria com os testes do transferidor neste projeto, mas posso tentar fazer uma solicitação de pull quando tiver oportunidade.
Obrigado pelo seu feedback!
No entanto, não posso reproduzir isso. Estou usando um transferidor neste projeto e parece funcionar bem. Mas, dito isso, pode ser uma boa ideia usar ngZone.runOutsideAngular
para melhorar o desempenho. Mas se estivermos usando ngZone.runOutsideAngular
, precisamos usar ChangeDetectorRef
depois de carregar a imagem lentamente, certo? Tão angular sabe que a vista precisa ser renderizada novamente.
Já que não consigo reproduzir isso e parece que você tem uma solução funcionando. Você quer enviar um PR?
Claro, vou ver se consigo um na próxima semana :)
Criei uma nova versão do plugin. Você pode experimentar: npm install [email protected]
para ver se ele corrige o problema?
Certo! Vou experimentar hoje
Fechando isso. Avise-me se você ainda tiver tempo limite.
@tjoskar acabou de testar isso hoje e funciona, obrigado pela correção! :)
Comentários muito úteis
Claro, vou ver se consigo um na próxima semana :)