Ng-lazyload-image: TypeError: no se puede leer la propiedad 'toLowerCase' de undefined al cargar la página desde el medio frente a la parte superior

Creado en 18 jul. 2017  ·  11Comentarios  ·  Fuente: tjoskar/ng-lazyload-image

Hola,

Descubrí un error en el que si carga una página desplazada hasta la mitad (frente a la parte superior), Node da un error de "TypeError: No se puede leer la propiedad 'toLowerCase' de undefined". Esto no parece romper el complemento, ya que continúa con la carga diferida, sin embargo, el nuevo evento de salida onLoad parece no activarse correctamente hasta que vuelve a desplazarse hacia la parte superior.

Cómo volver a crear: cargue su página de prueba como de costumbre, en la parte superior. Desplácese hacia abajo hasta que esté a mitad de camino. Ahora actualice la página y comience a desplazarse desde el medio. Debería ver un error de nodo. Si no es así, asegúrese de que está utilizando el evento de salida onLoad. Si se desplaza hasta la parte superior, debería ver que el evento onLoad comienza a funcionar de repente.

Comentario más útil

Todos 11 comentarios

Hola,

No puedo reproducir esto: /
Cuando dices "Carga tu página de prueba como de costumbre". ¿Te refieres a esta página: https://tjoskar.github.io/ng-lazyload-image o ejecutas la página localmente con npm start ?

¿Qué navegador estás usando?

Por alguna razón en github.io no puedo actualizar la página después de cargarla una vez. Dice 404 no encontrado siempre :(

Pero en general, me refiero a nivel local con cualquier proyecto: estoy usando Angular 4 con Universal y Node (por lo que universal podría tener algo que ver con esto). Usando Chrome 59 para Windows 10. Creo que esto podría ser un error con la nueva funcionalidad onLoad pero no positivo. El error solo aparece en la consola de Node, no parece que surja ningún error en la consola de Chrome.

Hola @elitenick ,
¿Puede dar un seguimiento completo del error?

@tjoskar
Creo que el error está relacionado con https://github.com/tjoskar/ng-lazyload-image/blob/master/src/lazyload-image.ts#L75 , antes aquí se detectará el error, pero ya que no lo es.
En Angular Universal aquí https://github.com/tjoskar/ng-lazyload-image/blob/master/src/lazyload-image.ts#L47 produciendo un error, porque element en el servidor no está definido.
Creo que una solución bastante buena del problema es deshabilitar la imagen perezosa en el lado del servidor.

Por alguna razón en github.io no puedo actualizar la página después de cargarla una vez. Dice 404 no encontrado siempre :(

Sí, eso es porque github no admite redirigir todas las solicitudes a index.html (pero ese es un problema completamente diferente)

Probablemente tenga algo que ver con Angular Universal, pero hay algunas cosas que no entiendo:

  1. ¿Por qué solo aparece el error cuando actualiza la página? El nodo no debería obtener ninguna información sobre la posición de desplazamiento o si es su primera o segunda visita (el backend no debería tener ningún estado de ese tipo).
  2. Digamos que es esta fila la que causa el problema. Si es así, element no puede ser indefinido porque estamos accediendo a nodeName desde element sin ningún error y, además, estamos usando element en isVisible () e incluso estamos usando window en esa función, que debería estar indefinida en un contexto de servidor.

Creo que esto podría ser un error con la nueva funcionalidad onLoad pero no positivo

¿Está usando (onLoad) ? ¿Puede intentar eliminarlo y ver si puede reproducir el error?

@rimlin

Creo que una solución bastante buena del problema es deshabilitar la imagen perezosa en el lado del servidor.

Sí, no tiene ningún sentido cargar imágenes de forma diferida en el servidor (ya que no sabemos nada sobre el tamaño de la pantalla).
Tal vez podamos agregar if (isPlatformServer(this.platformId)) return; ( ref ) en ngAfterContentInit .

@elitenick , acabo de publicar [email protected] con @rimlin pull request. ¿Puedes instalarlo ( npm install [email protected] ) y ver si resuelve el problema?

¡Con seguridad! ¡Lo comprobaré hoy y te lo haré saber! Gracias chicos.

¡Está arreglado! ¡¡Gracias una tonelada!! Recreé mi mismo escenario varias veces y no más errores de nodo. Y la carga diferida continúa funcionando una vez que Angular se activa.

Incluido en [email protected] .

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

coryrylan picture coryrylan  ·  7Comentarios

philipgiuliani picture philipgiuliani  ·  11Comentarios

dkmostafa picture dkmostafa  ·  7Comentarios

vincent-cm picture vincent-cm  ·  10Comentarios

vugar005 picture vugar005  ·  10Comentarios