就像你可以绑定到 DOM 元素的属性一样,你也可以绑定到组件的属性(props)。例如,我们可以像绑定表单元素一样绑定这个 <Keypad> 组件的 value 属性。
首先,我们需要将这个属性标记为_可绑定的_。在 Keypad.svelte 中,更新 $props() 声明以使用 $bindable 符文:
Keypad
let { value = $bindable(''), onsubmit } = $props();然后,在 App.svelte 中,添加一个 bind: 指令:
App
<Keypad bind:value={pin} {onsubmit} />现在,当用户与数字键盘交互时,父组件中的 pin 值会立即更新。
请谨慎使用组件绑定。如果使用太多组件绑定,特别是在没有”单一数据源”的情况下,可能会难以跟踪应用程序中的数据流向。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<script>
import Keypad from './Keypad.svelte';
let pin = $state('');let view = $derived(pin
? pin.replace(/\d(?!$)/g, '•')
: 'enter your pin');
function onsubmit() { alert(`submitted ${pin}`);}
</script>
<h1 style="opacity: {pin ? 1 : 0.4}"> {view}</h1>
<Keypad {onsubmit} />