Ng-lazyload-image: ParseError: 'importar' y 'exportar' pueden aparecer solo con 'sourceType: module'

Creado en 19 may. 2016  ·  6Comentarios  ·  Fuente: tjoskar/ng-lazyload-image

¡Hola!
Estoy trabajando con Angular 2 en un proyecto Ionic 2 y estoy tratando de importar LazyLoad pero obtengo un error de compilación

my_file.js
import {Component, Input} from "angular2/core";
import {LazyLoadImageDirective} from "ng2-lazyload-image/index";

@Component({
    selector: 'image',
    template: `
        <img src="images/placeholder_big" [lazyLoad]="image" offset="50">
    `,
    directives: [LazyLoadImageDirective]
})
class ImageComponent {
    @Input('src') image;
}
export {ImageComponent}
/Users/lobetia/repo/ionic2_migration/node_modules/ng2-lazyload-image/index.ts:1
import {LazyLoadImageDirective} from './src/lazyload-image.directive';
^
ParseError: 'import' and 'export' may appear only with 'sourceType: module'

Intentando incluir el módulo sin escritura de índice
import {LazyLoadImageDirective} from "ng2-lazyload-image";
Me sale un error similar

/Users/lobetia/repo/ionic2_migration/node_modules/ng2-lazyload-image/src/lazyload-image.directive.ts:1
import 'rxjs/add/observable/fromEvent';
^
ParseError: 'import' and 'export' may appear only with 'sourceType: module'

No sé cómo solucionar esto y no puedo averiguar si es mi problema o algo relacionado con este módulo.

¿Me puedes ayudar? Gracias

Comentario más útil

Y otra cosa, la directiva escuchará eventos de desplazamiento en window si no le dice lo contrario. Lo que debe hacer para las aplicaciones ionic ya que es un div interno que maneja el desplazamiento.

es decir

<ion-content #container>
  <img [scrollTarget]="container._scrollEle" ...>
</ion-content>

Vea mi ejemplo anterior y el n. ° 2

Todos 6 comentarios

Hola,

¿Cuál es tu configuración? ¿Estás usando Ionic con babel o mecanografiado?
Si está utilizando mecanografiado, ¿puede darme su archivo tsconfig.json ?

Actualmente estoy usando [email protected] en el nodo 5.4
Yo uso mecanografiado y mi tsconfig.json es

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "filesGlob": [
    "**/*.ts",
    "!node_modules/**/*"
  ],
  "exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts"
  ],
  "compileOnSave": false,
  "atom": {
    "rewriteTsconfig": false
  }
}

No sé por qué, pero por alguna razón, mecanografiado intenta recompilar los archivos fuente en lugar de tomar los archivos compilados .js .
Mi solución, sin embargo, fue excluir los archivos fuente en npm.

Entonces, si creo un nuevo proyecto con:

$ ionic start MyIonic2Project tutorial --v2 --ts

Y luego cambiando /app/pages/hello-ionic/hello-ionic.ts a:

import { Page } from 'ionic-angular';
import { LazyLoadImageDirective } from 'ng2-lazyload-image';

@Page({
  templateUrl: 'build/pages/hello-ionic/hello-ionic.html',
  directives: [ LazyLoadImageDirective ]
})
export class HelloIonicPage {
    defaultImage: string;
    image: string;
    offset: number;

    constructor() {
        this.defaultImage = 'https://www.placecage.com/1000/500';
        this.image = 'https://images.unsplash.com/photo-1443890923422-7819ed4101c0?fm=jpg';
        this.offset = 100;
    }
}

y /app/pages/hello-ionic/hello-ionic.html para:

<ion-navbar *navbar>
  <button menuToggle>
    <ion-icon name="menu"></ion-icon>
  </button>
  <ion-title>Hello Ionic</ion-title>
</ion-navbar>

<ion-content padding class="getting-started" #container>
  <p style="height: 1000px;">
      This starter project comes with simple tabs-based layout for apps
      that are going to primarily use a Tabbed UI.
    </p>
    <img
      [src]="defaultImage"
      [lazyLoad]="image"
      [offset]="offset"
      [scrollTarget]="container._scrollEle">
</ion-content>

Ahora parece funcionar bien con [email protected] .

¿Puedes darle una vuelta?

Y otra cosa, la directiva escuchará eventos de desplazamiento en window si no le dice lo contrario. Lo que debe hacer para las aplicaciones ionic ya que es un div interno que maneja el desplazamiento.

es decir

<ion-content #container>
  <img [scrollTarget]="container._scrollEle" ...>
</ion-content>

Vea mi ejemplo anterior y el n. ° 2

Funciona a las mil maravillas, ¡eres increíble!
Empaqueté todo en un componente img-lazy y voy a trabajar un poco para animar el desvanecimiento de la imagen y tal vez alguna función de almacenamiento en caché sin conexión

En mi opinión este tema está perfectamente cerrado 👍 👍

¡Me alegro de que funcione!

Voy a trabajar un poco en animar el desvanecimiento de la imagen.

Solo para que sepas. Si agrega una clase ng2-lazyloading , se eliminará automáticamente después de que se hayan cargado las imágenes y se agregará la clase ng2-lazyloaded .

es decir

// Before loaded
<img [lazyLoad]="image" class="ng2-lazyloading">

// After loaded
<img [lazyLoad]="image" class="ng2-lazyloaded">

Puedes ver un ejemplo aquí: https://github.com/tjoskar/ng2-lazyload-image/blob/a227020c52af0fc30b6683e05c4f4a57f67b13ce/example/image.component.ts#L14 y por supuesto el código fuente: https://github.com /tjoskar/ng2-lazyload-image/blob/8e8f7d46ebad227c4584594b32d0ac9b1945a74e/src/lazyload-image.directive.ts#L77

Avísame si tienes problemas.

y tal vez alguna función de almacenamiento en caché sin conexión.

Avísame si construyes algo genial;)

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

Temas relacionados

walfro picture walfro  ·  11Comentarios

vincent-cm picture vincent-cm  ·  10Comentarios

stratio84 picture stratio84  ·  6Comentarios

AzerHeshim picture AzerHeshim  ·  5Comentarios

philipgiuliani picture philipgiuliani  ·  11Comentarios