您也可以在 Each 的过程中使用。
不过需要注意的是,与这些
交互会改变数组。当要使用不可变数据,应该去避免使用这些绑定,并且改用事件来处理这些内容。
<script>
let items = [{}, {}, {}]
</script>
{#each items as item,i}
<div>
<p>
{i}:<input bind:value={item.input}>
</p>
<b>
value: {item.input}
</b>
</div>
{/each}
尽管没有定义
item.input
,但还是可以使用
和
标签也有许多可绑定属性。
只读属性
属性 | 类型 |
---|---|
duration | 视频的总时长,以秒为单位 |
buffered | {start, end} 数组对象 |
seekable | {start, end} 数组对象 |
played | {start, end} 数组对象 |
seeking | boolean |
ended | boolean |
双向绑定
属性 | 类型 |
---|---|
currentTime | 视频当前播放位置,以秒为单位 |
playbackRate | 视频播放速度,正常是 1 |
paused | 是否已暂停 |
volume | 音量,.0 到 1 |
muted | 是否被暂停 |
视频还有独特的 videoWidth
和 videoHeight
可以绑定,效果当然不言而喻。
每个 block
(块级)元素都有、clientWidth
、 clientHeight
和 offsetWidth
、 offsetHeight
。
当然都是只读的。
<script>
let size = 25
let oX, oY
</script>
<input type=range min=10 max="50" bind:value={size}>
<div>
<span
style="font-size: {size}px;"
bind:offsetWidth={oX}
bind:offsetHeight={oY}
>
我想养只猫
</span>
</div>
<p>
offset width: <b>{oX}</b>px,
offset height: <b>{oY}</b>px
</p>
只读 this
可以绑定于每个元素和组件,而且可以获取对 渲染元素的引用。
请注意,在组件挂载之前的值将是undefined,因此我们将逻辑放在 onMount
生命周期函数中。
生命周期在后面的文章会提到。
<script>
import { onMount } from 'svelte'
let t = ''
console.log('挂载前,this内容',t)
onMount(() => {
console.log('挂载后,this内容',t)
})
</script>
<div bind:this={t}>hi</div>
就像你可以绑定到 DOM 元素的属性一样,你也可以绑定到组件的 props,也可以绑定到组件实例本身,来使用组件内导出的内容。
来看一个示例:
Tips.svelte
<script>
let tip = null
export function show(content) {
tip = content
}
</script>
{#if tip !== null}
<div class="tip">
{tip}
</div>
{/if}
<style>
.tip {
width: 100%;
height: 40px;
background: rgb(234, 245, 255);
border-radius: 5px;
display: flex;
justify-content: center;
align-items: center;
}
</style>
App.svelte
<script>
import Tips from './Tips.svelte';
let t;
</script>
<Tips bind:this={t} />
<button on:click={() => t.show('hi')}>Show 'hi'</button>