html - Svelte:以可重用的方式关联标签和输入
问题描述
我正在构建一个 Svelte 输入组件,它应该可以在同一页面上多次使用。
<div>
<label>{label}</label>
<div>
<input bind:value>
<!-- some more elements -->
</div>
</div>
尝试关联标签和输入我有以下问题:
- 我不能通过将外部更改为
<div>
来使用隐式关联<label>
,因为输入不是直接子级。 - 我不能使用标签
for
属性,因为重用元素会创建可变的相同 ID。
有没有办法在 Svelte 中创建组件实例唯一 ID(前置或后置),或者是否有另一种解决方案。
还是手动将随机字符串设置为 id 的最佳解决方案?
<script>
const id = random_string();
/* ... */
</script>
<div>
<label for={id}>{label}</label>
<div>
<input {id} bind:value>
<!-- some more elements -->
</div>
</div>
解决方案
您可以在模块上下文中定义一个计数器,然后使用它来创建唯一 ID
输入.svelte
<script context="module">
let counter = 0
</script>
<script>
export let label
let value
let eltId = 'input_'+ counter++
</script>
<div>
<label for={eltId}>{label}</label>
<div>
<input id={eltId} bind:value>
</div>
</div>
App.svelte
<script>
import Input from './Input.svelte'
</script>
<Input label='Select Country' />
<Input label='Select Country' />
<Input label='Select Country' />
见REPL
推荐阅读
- dialogflow-es - 我可以为 EQA 使用 URL 吗?
- php - Google Cloud 第一次通过 ftp 连接,但在几秒钟内恢复为写入权限被拒绝(在这种情况下文件变为空白)
- ios - XCode 故事板上使用的不同数量的按钮
- android - 在场景形式中渲染时,矢量有时会以不同的方式应用
- apache-poi - 我想直接以流的形式读取特定单元格的图片。我应该怎么办?
- ember.js - 是否可以在ember JS中的条件#if中添加比较操作?
- oracle - 检测,当 Oracle 服务器停止成为“PRIMARY”时
- html - 无法使 prefers-color-scheme html 媒体属性起作用
- javascript - 未捕获的类型错误:无法读取未定义的属性“电子邮件” - ReactJS
- html - 如何在div下垂直对齐h3文本?