2015-04-13 7 views
5

Sto cercando di far funzionare l'app di avvio di Aurelia, ma ho riscontrato un errore nella prima pagina. http://aurelia.io/get-started.htmlAurelia/ES6 definizione di classe e proprietà, errore di sintassi idraulico

Il codice in questione:

export class Welcome { 
    heading = 'Welcome to the Aurelia Navigation App!'; 
    firstName = 'John'; 
    lastName = 'Doe'; 

    get fullName(){ 
    return `${this.firstName} ${this.lastName}`; 
    } 

    welcome(){ 
    alert(`Welcome, ${this.fullName}!`); 
    } 
} 

L'errore:

[21:46:19] Plumber found unhandled error: 
SyntaxError in plugin 'gulp-babel' 
Message: 
    D:/workspace/aurelia/navigation-app/src/app.js: Unexpected token (2:10) 
    1 | export class Welcome { 
> 2 | heading = 'Welcome to the Aurelia Navigation App!'; 
    |   ^
    3 | firstName = 'John'; 
    4 | lastName = 'Doe'; 
    5 | 
[21:46:19] Finished 'build-system' after 20 ms 

Devo dire che io sono su Windows, potrebbe creare qualche problema.


Ho "risolto" questo problema inserendo le variabili in un costruttore. Ma la sintassi sopra non è valida per ES6? è che ES7 o qualcosa non è ancora utilizzabile?


So che questo codice sembra strano, ma io non sono l'autore, è il codice originale da Aurelia esercitazione

+0

Non sapendo come si imposta, è difficile dire perché non ha funzionato. Ho creato l'app di navigazione in Windows e ha funzionato. Forse un problema con le tue dipendenze. – talves

+0

Ho seguito davvero tutte le istruzioni della pagina introduttiva. Ed è solo un problema di sintassi che è ciò che lo rende così strano ... – sam

+0

@sam Ho aggiornato la tua domanda per dare un contesto un po 'migliore, se non sei d'accordo per favore fammelo sapere e posso annullare. Il problema è con la sintassi ES6 e non è specifico per Aurelia. Ha senso? –

risposta

10

La seguente sintassi non è la sintassi ES6 valida per le classi. MA, è la sintassi di inizializzatore di proprietà ES7 valida per le classi. Per usarlo, se stai usando Babel, devi essere sicuro di abilitare questa funzione in modo specifico. Questo è documentato nel blog di Aurelia ed è configurato come parte dell'ultimo scheletro.

export class Welcome { 
    heading = 'Welcome to the Aurelia Navigation App!'; 
    firstName = 'John'; 
    lastName = 'Doe'; 

    get fullName(){ 
    return `${this.firstName} ${this.lastName}`; 
    } 

    welcome(){ 
    alert(`Welcome, ${this.fullName}!`); 
    } 
} 
+0

Grazie! Questo è quello che sospettavo, e in effetti l'ultimo scheletro funziona perfettamente, grazie per questo ottimo framework! – sam

+0

quindi come posso abilitarlo? Sto avendo lo stesso problema con aurelia – chovy

+0

Le tue opzioni Babel dovrebbero assomigliare a questo: modulo.esportazioni = { moduli: 'sistema', moduleIds: false, commenti: false, compatta: false, tappa: 2, opzionale: [// notare questi ES7 opzionale funzioni sono attivate "es7.decorators", "es7.classProperties" ] }; – EisenbergEffect

1

Ma è la sintassi di cui sopra non valida ES6?

No, non lo è. I corpi di classe possono contenere solo definizioni di metodo. Sembra funzionare in modalità sperimentale di Babele, però.

Ho "risolto" questo problema inserendo le variabili in un costruttore.

Questa è la soluzione corretta. Dati proprietà dovrebbero essere proprietà di istanza in genere. Se si vuole metterli sul prototipo, dovrete farlo explcitly in ES6:

export class Welcome { 
    constructor() { 
    this.firstName = 'John'; 
    this.lastName = 'Doe'; 
    } 

    get fullName(){ 
    return `${this.firstName} ${this.lastName}`; 
    } 

    welcome(){ 
    alert(`Welcome, ${this.fullName}!`); 
    } 
} 
Welcom.prototype.heading = 'Welcome to the Aurelia Navigation App!'; 
+1

Mi chiedo ancora perché la pagina iniziale di Aurelia desse questo codice, dal momento che dovrebbe essere il codice ES7, quindi posso solo immaginarlo dovrebbe funzionare con le loro librerie? – sam

+0

thias non è una cattiva risposta, anche se non è la risposta migliore –

Problemi correlati