はじめに
これはフィクションです。
いよいよ実装
Todo.svelte
function push() {
+ todo = [value, ...todo];
- todo.push(value);
}
さて本題
Todo.svelte
function push() {
let todo = [];
let value;
+ export function push() { // exportを追加!
- function push() {
if(value && value.trim().length > 0)
todo = [value, ...todo];
value = '';
}
+ export function pop() { // exportを追加!
- function pop() {
todo.pop();
todo = [...todo];
}
}
App.svelte
<script>
import Todo from './Todo.svelte';
let todo;
</script>
<Todo bind:this={todo}/> //thisをバインドして変数todoと紐づけ
App.svelte
<script>
import Todo from './Todo.svelte';
let todo;
</script>
<Todo bind:this={todo}/> //thisをバインドして変数todoと紐づけ
+ <button on:click={todo.push}>Push</button> //ボタンのクリックイベントでpushファンクションをコール
まとめ
ToDo.svelte
<!-- script-->
<script>
let todo = [];
let value;
export function push() {
if(value && value.trim().length > 0)
todo = [value, ...todo];
value = '';
}
export function pop() {
todo.pop();
todo = [...todo];
}
</script>
<!-- html-->
<input type='text' bind:value={value}>
<ul>
{#each todo as item}
<li>{item}</li>
{/each}
</ul>
App.svelte
<script>
import Todo from './Todo.svelte';
//This gonna be binded to Todo instance
let todo;
function onKeyDown(event) {
// Call Todo instance methods
event.key === 'Enter' && todo.push();
}
</script>
<!-- Bind Todo itself and call its' method -->
<div>
<Todo bind:this={todo}/>
</div>
<!-- buttons calling Todo's method -->
<div>
<button on:click={todo.push} id='push'>Push</button> <!-- Call Todo's push method -->
<button on:click={todo.pop} id='pop'>Pop</button> <!-- Call Todo's pop method -->
</div>
<svelte:window on:keydown={onKeyDown} />
Replのリンクはこちら。Call function inside of a component from the component
次回予告
これはフィクションです。
Markdownの使い方が本来意図された使い方と異なるなどの批判は受け付けません。