Skip to main content

Bind

Description​

Bind is a custom util representing a Svelte action designed for enabling two-way data binding between an HTML element's value and a variable. The util is used to synchronize element's value with the bound variable and updates every time when either of the values changes.


Integration and Usage​

To use bind util, you need to import it into your project

import { bind } from './path/to/utils/bind';

and add it to a HTML element that has a value property (e.g., <input>).

<input type="text" use:bind={value} />


Type Definition​

import type { ActionReturn } from 'svelte/action';

interface Return {
'on:bind': (v: { detail: any }) => any;
}
  • ActionReturn
    • represents the return type of a Svelte action
    • can contain functions and event handlers
  • Return Interface
    • defines the structure of on:bind event handler which is dispatched by the bind action
    • event handler function takes an object with detail property and can optionally return a value


Bind Function​

export function bind(
node: HTMLElement & { value: any },
value: any
): ActionReturn<{}, Return>

Parameters​

  • node: HTMLElement & {value: any}
    • the DOM element it binds the actions to
    • must have a value property (e.g., <input>, <select>, <textarea>)
  • value: any
    • value that binds to the element
    • updated based on the changes in the DOM element
    • can be any type that the element's value property supports

Return Type​

  • ActionReturn<{}, Return>
    • {}: no specifict options are passed to the action
    • Return: specifies the custom event on:bind defined in the Return interface as part of return type


Function Logic​

node.addEventListener('value', change);

An event listener is added to the node listening for value events and triggering the function change.


Change Function​

function change(event: any) {
value = event.detail.value;
node.dispatchEvent(new CustomEvent('bind', { detail: value }));
}

Function Change is a part of function Bind that updates the value variable whenever it is modified.


Returns​

return {
update(v: any) {
value = v;
node.value = v;
}
};

Function bind returns an object that mathes the format of Svelte's ActionReturn interface. It contains a function:

  • update:(v: any)
    • called when the bound value changes
    • updates both the element's value as well as the internal state


Events​

  • bind
    • triggers when the value in the detail property changes