Cómo trabajar con enlaces en Svelte
Usando Svelte puedes crear un enlace bidireccional entre los datos y la interfaz de usuario.
Muchos otros marcos web pueden proporcionar enlaces bidireccionales, es un patrón muy común.
Son especialmente útiles con formularios.
enlazar:valor
Comenzamos con la forma de enlace más común que usarás a menudo, que puedes aplicar usando bind:value
. Tomas una variable del estado del componente y la vinculas a un campo de formulario:
scriptlet name = ''/scriptinput bind_value={name}
Ahora bien, si name
se modifica el campo de entrada, se actualizará su valor. Y lo contrario también es cierto: si el usuario actualiza el formulario, el name
valor de la variable cambia.
Solo tenga en cuenta que la variable debe definirse utilizando let/var
y no const
, de lo contrario, Svelte no podrá actualizarla, ya que const
define una variable con un valor que no se puede reasignar.
bind:value
funciona en todos los tipos de campos de entrada ( type="number"
, type="email"
y así sucesivamente), pero también funciona para otros tipos de campos, como textarea
y select
(más sobre esto select
más adelante).
Casillas de verificación y botones de opción
Las casillas de verificación y las entradas de radio ( input
elementos con type="checkbox"
o type="radio"
) permiten estas 3 vinculaciones:
bind:checked
bind:group
bind:indeterminate
bind:checked
nos permite vincular un valor al estado comprobado del elemento:
scriptlet isChecked/scriptinput type=checkbox bind_checked={isChecked}
bind:group
es útil con casillas de verificación y entradas de radio porque se usan muy a menudo en grupos. Con esto, bind:group
puede asociar una matriz de JavaScript a una lista de casillas de verificación y completarla en función de las opciones elegidas por el usuario.
A continuación se muestra un ejemplo. La goodDogs
matriz se completa en función de las casillas de verificación que marca:
scriptlet goodDogs = []let dogs = ['Roger', 'Syd']/scripth2 Who's a good dog?/h2ul {#each dogs as dog} li{dog} input type=checkbox bind_group={goodDogs} value={dog}/li {/each}/ulh2 Good dogs according to me:/h2ul {#each goodDogs as dog} li{dog}/li {/each}/ul
Vea el ejemplo en https://svelte.dev/repl/059c1b5edffc4b058ad36301dd7a1a58
bind:indeterminate
nos permite vincularnos al indeterminate
estado de un elemento (si quieres aprender más dirígete a https://css-tricks.com/indeterminate-checkboxes/)
Seleccionar campos
bind:value
También funciona para que el select
campo de formulario obtenga el valor seleccionado asignado automáticamente al valor de una variable:
scriptlet selected/scriptselect bind_value={selected} option value="1"1/option option value="2"2/option option value="3"3/option/select{selected}
Lo bueno es que si generas opciones dinámicamente a partir de una matriz de objetos, la opción seleccionada ahora es un objeto, no una cadena:Te recomendamos Dioses y mitos
scriptlet selectedconst goodDogs = [ { name: 'Roger' }, { name: 'Syd' }]/scripth2List of possible good dogs:/h2select 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}
Ver ejemplo: https://svelte.dev/repl/7e06f9b7becd4c57880db5ed184ea0f3
select
También permite el multiple
atributo:
scriptlet selected = []const goodDogs = [ { name: 'Roger' }, { name: 'Syd' }]/scripth2List of possible good dogs:/h2select multiple bind_value={selected} {#each goodDogs as goodDog} option value={goodDog}{goodDog.name}/option {/each}/select{#if selected.length}h2Good dog selected:/h2ul {#each selected as dog} li{dog.name}/li {/each}/ul{/if}
Ver ejemplo: https://svelte.dev/repl/b003248e87f04919a2f9fed63dbdab8c
Otras encuadernaciones
Dependiendo de la etiqueta HTML en la que estés trabajando, puedes aplicar diferentes tipos de enlaces.
bind:files
es un enlace válido en type="file"
elementos de entrada para vincular la lista de archivos seleccionados.
El details
elemento HTML permite el uso de bind:open
para vincular su valor de apertura/cierre.
Las etiquetas HTML audio
y video
multimedia le permiten vincular varias de sus propiedades: currentTime
, duration
, paused
, buffered
, seekable
, played
, volume
, playbackRate
.
textContent
y innerHTML
se pueden vincular a contenteditable
los campos.
Todo muy útil para esos elementos HTML específicos.
Enlaces de lectura individual
offsetWidth
, offsetHeight
, clientWidth
, clientHeight
se puede limitar la lectura únicamente en cualquier elemento HTML de nivel de bloque, excluyendo etiquetas void (como br
) y elementos que estén configurados para estar en línea ( display: inline
).
Obtener una referencia al elemento HTML en JavaScript
bind:this
es un tipo especial de enlace que le permite obtener una referencia a un elemento HTML y vincularlo a una variable de JavaScript:
scriptlet myInputField/scriptinput bind_this={myInputField} /
Esto es útil cuando necesita aplicar lógica a los elementos después de montarlos, por ejemplo, utilizando la onMount()
devolución de llamada del evento del ciclo de vida.
Componentes de enlace de apoyos
El uso bind:
puede vincular un valor a cualquier propiedad que un componente exponga.
Digamos que tienes un Car.svelte
componente:
scriptexport let inMovement = false/scriptbutton on_click={() = inMovement = true }Start car/button
Puedes importar el componente y vincular la inMovement
propiedad:
script import Car from './Car.svelte'; let carInMovement;/scriptCar bind_inMovement={carInMovement} /{carInMovement}
Esto puede permitir escenarios interesantes.
Tal vez te puede interesar:
- Introducción a React
- Agregar evento de clic a los elementos DOM devueltos desde querySelectorAll
- Cómo cambiar el valor de un nodo DOM
- Cómo comprobar si un elemento DOM tiene una clase
Fijaciones Svelte
enlazar:valorCasillas de verificación y botones de opciónSeleccionar camposOtras encuadernacionesEnlaces de lectura individualObtener una referencia al eleme
programar
es
2025-01-23

Si crees que alguno de los contenidos (texto, imagenes o multimedia) en esta página infringe tus derechos relativos a propiedad intelectual, marcas registradas o cualquier otro de tus derechos, por favor ponte en contacto con nosotros en el mail [email protected] y retiraremos este contenido inmediatamente