Comment travailler avec des liaisons dans Svelte
À l'aide de Svelte, vous pouvez créer une liaison bidirectionnelle entre les données et l'interface utilisateur.
De nombreux autres frameworks Web peuvent fournir des liaisons bidirectionnelles, c'est un modèle très courant.
Ils sont particulièrement utiles avec les formulaires.
bind: valeur
Commençons par la forme de liaison la plus courante que vous utiliserez souvent, que vous pouvez appliquer en utilisantbind:value
. Vous prenez une variable de l'état du composant et vous la liez à un champ de formulaire:
<script>
let name = ''
</script>
<input bind:value={name}>
Maintenant siname
change le champ de saisie mettra à jour sa valeur. Et l'inverse est également vrai: si le formulaire est mis à jour par l'utilisateur, lename
les changements de valeur de variable.
Sachez simplement que la variable doit être définie en utilisant
let/var
et pasconst
, sinon il ne peut pas être mis à jour par Svelte, carconst
définit une variable avec une valeur qui ne peut pas être réaffectée.
bind:value
fonctionne sur toutes les saveurs de champs de saisie (type="number"
,type="email"
et ainsi de suite), mais cela fonctionne également pour d'autres types de champs, commetextarea
etselect
(plus surselect
plus tard).
Cases à cocher et boutons radio
Cases à cocher et entrées radio (input
éléments avectype="checkbox"
outype="radio"
) autorisent ces 3 liaisons:
bind:checked
bind:group
bind:indeterminate
bind:checked
nous permet de lier une valeur à l'état vérifié de l'élément:
<script>
let isChecked
</script>
<input type=checkbox bind:checked={isChecked}>
bind:group
est pratique avec les cases à cocher et les entrées radio car celles-ci sont très souvent utilisées en groupe. Utilisantbind:group
vous pouvez associer un tableau JavaScript à une liste de cases à cocher et le remplir en fonction des choix effectués par l'utilisateur.
Voici un exemple. LegoodDogs
tableau se remplit en fonction des cases à cocher que je coche:
<script>
let goodDogs = []
let dogs = ['Roger', 'Syd']
</script>
<h2>
Who’s a good dog?
</h2>
<ul>
{#each dogs as dog}
<li>{dog} <input type=checkbox bind:group={goodDogs} value={dog}></li>
{/each}
</ul>
<h2>
Good dogs according to me:
</h2>
<ul>
{#each goodDogs as dog}
<li>{dog}</li>
{/each}
</ul>
Voir l'exemple surhttps://svelte.dev/repl/059c1b5edffc4b058ad36301dd7a1a58
bind:indeterminate
nous permet de nous lier auindeterminate
état d'un élément (si vous voulez en savoir plus, rendez-vous surhttps://css-tricks.com/indeterminate-checkboxes/)
Sélectionnez les champs
bind:value
fonctionne également pour leselect
champ de formulaire pour obtenir la valeur sélectionnée automatiquement affectée à la valeur d'une variable:
<script>
let selected
</script>
<select bind:value={selected}>
<option value=“1”>1</option>
<option value=“2”>2</option>
<option value=“3”>3</option>
</select>
{selected}
Ce qui est cool, c'est que si vous générez des options dynamiquement à partir d'un tableau d'objets, l'option sélectionnée est maintenant un objet et non une chaîne:
<script>
let selected
const goodDogs = [
{ name: ‘Roger’ },
{ name: ‘Syd’ }
]
</script>
<h2>List of possible good dogs:</h2>
<select bind:value={selected}>
{#each goodDogs as goodDog}
<option value={goodDog}>{goodDog.name}</option>
{/each}
</select>
{#if selected}
<h2>
Good dog selected: {selected.name}
</h2>
{/if}
Voir exemple:https://svelte.dev/repl/7e06f9b7becd4c57880db5ed184ea0f3
select
permet également lemultiple
attribut:
<script>
let selected = []
const goodDogs = [
{ name: ‘Roger’ },
{ name: ‘Syd’ }
]
</script>
<h2>List of possible good dogs:</h2>
<select multiple bind:value={selected}>
{#each goodDogs as goodDog}
<option value={goodDog}>{goodDog.name}</option>
{/each}
</select>
{#if selected.length}
<h2>Good dog selected:</h2>
<ul>
{#each selected as dog}
<li>{dog.name}</li>
{/each}
</ul>
{/if}
Voir exemple:https://svelte.dev/repl/b003248e87f04919a2f9fed63dbdab8c
Autres fixations
En fonction de la balise HTML sur laquelle vous travaillez, vous pouvez appliquer différents types de liaisons.
bind:files
est une liaison valable letype="file"
éléments d'entrée pour lier la liste des fichiers sélectionnés.
Ledetails
L'élément HTML permet l'utilisation debind:open
pour lier sa valeur d'ouverture / fermeture.
Leaudio
etvideo
Les balises HTML multimédias vous permettent de lier plusieurs de leurs propriétés:currentTime
,duration
,paused
,buffered
,seekable
,played
,volume
,playbackRate
.
textContent
etinnerHTML
peut être liécontenteditable
des champs.
Toutes choses très utiles pour ces éléments HTML spécifiques.
Liaisons en lecture seule
offsetWidth
,offsetHeight
,clientWidth
,clientHeight
peut être liélecture seulementsur n'importe quel élément HTML de niveau bloc, à l'exclusion des balises vides (commebr
) et les éléments définis pour être en ligne (display: inline
).
Obtenir une référence à l'élément HTML dans JavaScript
bind:this
est un type spécial de liaison qui vous permet d'obtenir une référence à un élément HTML et de le lier à une variable JavaScript:
<script>
let myInputField
</script>
<input bind:this={myInputField} />
Ceci est pratique lorsque vous devez appliquer une logique à des éléments après les avoir montés, par exemple en utilisantonMount()
rappel d'événement de cycle de vie.
Accessoires de composants de reliure
Utilisantbind:
vous pouvez lier une valeur à n'importe quel accessoire qu'un composant expose.
Dites que vous avez unCar.svelte
composant:
<script>
export let inMovement = false
</script>
<button on:click={() => inMovement = true }>Start car</button>
Vous pouvez importer le composant et lier leinMovement
soutenir:
<script>
import Car from './Car.svelte';
let carInMovement;
</script>
<Car bind:inMovement={carInMovement} />
{carInMovement}
Cela peut permettre des scénarios intéressants.
Téléchargez mon gratuitManuel de Svelte
Plus de tutoriels sveltes:
- Premiers pas avec Svelte - un court tutoriel
- Comment travailler avec des accessoires dans Svelte
- Comment importer des composants dans Svelte
- Comment exporter des fonctions et des variables à partir d'un composant Svelte
- Modèles Svelte: logique conditionnelle
- Comment renvoyer un composant Svelte à la demande
- Machines à sous Svelte
- Comment ajouter des commentaires dans les modèles Svelte
- Fixations Svelte
- Gestion des mises à jour d'état dans Svelte
- Déclarations réactives dans Svelte
- Événements du cycle de vie Svelte
- Modèles Svelte: boucles
- Résoudre les promesses dans les modèles Svelte
- Travailler avec des événements dans Svelte
- Gestion des états inter-composants dans Svelte
- Comment accéder à un paramètre d'URL dans Sapper en dehors du module de script
- Comment appliquer dynamiquement CSS dans Svelte
- Comment rediriger vers une URL dans Sapper
- Comment simuler une boucle for dans les modèles Svelte