【发布时间】:2022-01-07 21:05:26
【问题描述】:
我正在为我的应用程序开发一个表格组件。父组件会将数据传递给要渲染的表。除了数据,它还传递一个槽,其中包含为表中的每一行呈现的操作。动作必须作为插槽传递,因为它们可以变化。
在示例中,我想要实现的是,当更改类选择值时,隐藏的保存按钮变为可见(仅适用于该行),这需要从父方法“onClassChanged”中发生。
App.svelte
<script lang="ts">
import Table from "/src/components/DataTable/DataTable.svelte";
import {onMount} from "svelte";
export let transaction = 0;
let transactions: Array<Type.Transaction.Bank.Record> = [];
let classes: Array<Type.Transaction.Bank.Class> = [];
let transactionService = new Transaction();
async function loadTransactions() {
let result = await transactionService.get();
if (result) {
transactions = result['transactions'];
}
}
onMount(async () => {
await loadTransactions();
});
function onClassChanged() {
console.log('class changed');
}
</script>
<h1>Transactions</h1>
{#if transactions.length > 0}
<Table rows={transactions}>
<div slot="actions">
<select on:change={onClassChanged}>
{#each classes as tx_class}
<option value="1">Class A</option>
<option value="2">Class B</option>
{/each}
</select>
<button style="display: none">Save</button>
</div>
</Table>
{/if}
DataTable.svelte
<script lang="ts">
export let rows: Array<[]>;
</script>
<div class="datatable">
{#each rows as row}
<div class="table-row">
<div class="table-cell">
{row.id}
</div>
<div class="table-cell">
{row.description}
</div>
<div class="table-cell">
{row.date}
</div>
<div class="table-cell">
<slot name="actions" id="{row.id}"></slot>
</div>
</div>
{/each}
</div>
我不知道该怎么做,所以欢迎任何想法/解决方案。
【问题讨论】:
标签: svelte svelte-3 svelte-component