Aurelia, premiers pas
Il semblerait que tout nouveau framework javascript qui sorte se doive dâavoir le plus de dĂ©pendances et dâoutils possibles, ce qui fait que pour Ă©crire un simple âHello World!â, vous allez souvent rĂ©cupĂ©rer plusieurs centaines de megas de fichiers et autres outils pour minifier, tester, dĂ©ployer, ⊠AprĂšs, il faut juste comprendre comment cela fonctionne (ou pourquoi cela ne fonctionne pas), et si vous ne connaissez pas Grunt, Gulp, npm, Less, Sass, ⊠vous ne serez pas capable dâĂ©crire et de dĂ©marrer votre simple âHello World!â. Heureusement, il y a des gens sympas qui âfabriquentâ des âquicks tartersâ. Câest dĂ©jĂ le cas pour Angular2 en ce moment. Je vous conseille ces 2 lĂ :
- https://github.com/pkozlowski-opensource/ng2-play.ts
- https://github.com/pkozlowski-opensource/ng2-play
Bon, revenons Ă nos moutons:
Ces derniers jour, jâai voulu commencer Ă qualifier Aurelia (globalement, Aurelia a la mĂȘme vocation quâAngular: fournir tous les outils nĂ©cessaires pour faire une webapp). Je trouve que le tutorial de dĂ©part fait installer Ă©normĂ©ment de choses inutiles dans le cadre dâun apprentissage de dĂ©part. Je vous ai donc crĂ©Ă© un âquick starterâ pour Aurelia, que vous trouverez ici https://github.com/k33g/aurelia-discovery pour dĂ©marrer rapidement.
Installation
git clone https://github.com/k33g/aurelia-discovery.git
npm install
jspm install
DĂ©marrage
Câest une application Express qui fait office de serveur http:
cd aurelia-discovery
node app.js
Structure du âquick starterâ
La structure de notre projet ressemble Ă ceci:
aurelia-discovery/
âââ public/
| âââ css/
| | ââââ main.css/
| âââ index.html
| âââ app.html
| âââ app.js
| âââ config.js (configuration pour jspm - ne pas toucher)
âââ app.js
âââ config.js (configuration du serveur http)
Ouvrir index.html
index.htm
est notre point de dĂ©part, il nây a pas grand chose dedans, tout se jouera dans app.html
et app.js
.
Donc ne touchez Ă rien. Remarquez lâattribut du tag body: <body aurelia-app>
indispensable pour âexpliquerâ Ă Aurelia que votre application commence ici.
Ouvrir app.html et app.js
app.html
et app.js
représentent le coeur de votre application (le composant principal).
app.html
app.js
Donc:
- Un composant Aurelia se compose donc de 2 fichiers, un avec votre template html et lâautre avec le code javascript associĂ© (
mon-composant.html
etmon-composant.js
) - Une application Aurelia commence par un composant principal qui va contenir dans son template le contenu de
<body>
(souvenez vous de<body aurelia-app>
) - Le composant âApplicationâ possĂšde une mĂ©thode
activate
qui déclenchée une fois le document chargé dans le navigateur. Donc dans notre cas${message}
sera remplacé par"Playing with Aurelia and Express"
au moment de lâactivation. - Dans le code javascript, vous faites rĂ©fĂ©rence aux variables dĂ©crites dans le template, en les utilisant comme une propriĂ©tĂ© du composant (donc pour
${message}
nous auronsthis.message
)
Vous pouvez tester:
Ouvrez http://localhost:8080/ avec votre navigateur (ce sera un peu long car tout est fait dynamiquement)
Il est temps maintenant de faire notre 1er composant (custom component)
1er composant
Jâaimerais pouvoir faire un composant de type <hello-world mytext="yo"></hello-world>
, que je pourrais utiliser comme un tag html de base et qui afficherait le contenu de mon attribut mytext
.
- Créez un répertoire
public/components
- Créez un fichier
hello-world.html
(danscomponents
) - Créez un fichier
hello-world.js
(danscomponents
)
DĂ©claration du composant dans app.html
Nous allons modifier le code de app.html
pour référencer notre futur composant:
app.html
- Vous notez donc lâutilisation du tag
<require from='...'></require>
pour référencer un composant - Et nous allons utiliser 3 fois notre composant
Ecriture de notre composant
Commençons par le plus simple:
hello-world.html
Et ensuite:
hello-world.js
Donc:
import {inject} from 'aurelia-framework';
nous permet dâutiliser le âdecorateurâ@inject(Element)
pour injecterelement
Ă notre constructeur et avoir accĂšs ainsi aux propriĂ©tĂ©s des Ă©lĂ©ments du composant- ainsi, pour rĂ©cupĂ©rer la valeur de lâĂ©lĂ©ment, nous pouvons maintenant utiliser
element.getAttribute("mytext")
Et ça se teste:
Faites un ârefreshâ dans votre navigateur, et vous obtiendrez ceci:
Un 2Ăšme composant pour la route
Je voudrais un composant qui mâaffiche une liste Ă partir dâun tableau de valeurs, et pouvoir ajouter un Ă©lĂ©ment Ă la liste lorsque je clique sur un lien:
- Créez un fichier
my-list.html
(danscomponents
) - Créez un fichier
my-list.js
(danscomponents
)
my-list.html
- Pour parcourir une liste dâitems, utiliser
repeat.for
- lâitem est lui mĂȘme ârenduâ dans un template :
<template replaceable>
- capturer un évÚnement : utiliser le mot clé
trigger
, dans notre casclick.trigger
- la méthode
updateList()
est une méthode du composant définie dansmy-list.js
my-list.js
Pas grand chose Ă dire, le code parle de lui mĂȘme.
Pensez à déclarer et inclure le composant dans app.html
:
app.html
Testez Ă nouveau:
Faites un ârefreshâ dans votre navigateur, et vous obtiendrez ceci (cliquez pour tester):
VoilĂ . Câest tout simple. A suivre.