如标题所示,我正在尝试将方法从父组件传递给子组件。
例如,
App.html
<div>
<TodoItem
done={todo.done}
toggle={toggle}
/>
</div>
<script>
import TodoItem from './TodoItem.html';
export default {
components: {
TodoItem,
},
methods: {
toggle(index) {
console.log(index);
},
},
};
</script>
Run Code Online (Sandbox Code Playgroud)
TodoItem.html
<div>
<button on:click="toggle(0)"></button>
</div>
<script>
export default {
methods: {
toggle(index) {
// a guess. this works if you pass in console.log
this.options.data.toggle(index)
},
},
};
</script>
Run Code Online (Sandbox Code Playgroud)
所需的功能是TodoItem使用其数据调用父方法。
此示例中断,控制台日志TypeError: this.options.data.toggle is not a function。
Ujj*_*pta 14
似乎“火”是 svelte v2 的一部分,但在 svelte v3 中它改变了 createEventDispatcher
例如——
孩子.svelte
<script>
import { createEventDispatcher } from 'svelte';
const dispatch = createEventDispatcher();
function sayHello() {
dispatch('message', {
text: 'Hello!'
});
}
</script>
<button on:click={sayHello}>
Click to say hello
</button>
Run Code Online (Sandbox Code Playgroud)
parent.svelte
<script>
import Inner from './child.svelte';
function handleMessage(event) {
alert(event.detail.text);
}
</script>
<Inner on:message={handleMessage}/>
Run Code Online (Sandbox Code Playgroud)
欲了解更多信息 - 请访问:https : //svelte.dev/tutorial/component-events
Ric*_*ris 10
它可以通过方法到子组件,但它是一个有点尴尬。一种更惯用的方法是从子组件中触发一个事件,并从父组件中监听该事件:
App.html
<div>
<TodoItem
{todo}
on:toggle="toggle(todo)"
/>
</div>
<script>
import TodoItem from './TodoItem.html';
export default {
components: {
TodoItem,
},
methods: {
toggle(todo) {
todo.done = !todo.done;
const { todos } = this.get();
this.set({ todos });
}
}
};
</script>
Run Code Online (Sandbox Code Playgroud)
TodoItem.html
<div>
<button on:click="fire('toggle')">{todo.description}</button>
</div>
Run Code Online (Sandbox Code Playgroud)
如果您需要将事件传递给多个级别的组件,则可以重新触发该事件...
<TodoItem on:toggle="fire('toggle', event)">...</TodoItem>
Run Code Online (Sandbox Code Playgroud)
...但是这样做的捷径意味着相同的事情:
<TodoItem on:toggle>...</TodoItem>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1621 次 |
| 最近记录: |