我是新的前端和苗条和实验的一些东西。
我有以下计数器组件,其中包含用于项目的递增/递减按钮:
Counter.svelte
<script>
export let amount = 0;
function increment() {
amount += 1;
}
function decrement() {
if (amount > 0) {
amount -= 1;
}
}
</script>
<button on:click={decrement}>-</button>{amount}<button on:click={increment}>+</button>
App.svelte
<script>
... import stuff
let items=[{ //data from rest
id: 1,
name: potato,
price: 5
}, {
id: 2,
name: garlic,
price: 3
}, {
id: 3,
name: rice,
price: 10
}];
function purchase() {
//TODO use JSON generated in POST
}
</script>
{#each items as item}
{item.name} <Counter></Counter>
{/each}
<button on:click={purchase}>Purchase</button>
当我点击按钮后,为项目选择的数量不为0时,我如何生成下面的JSON?(假设大蒜数量为0)
[{
id: 1,
name: potato,
price: 5,
amount: 30
},{
id: 3,
name: rice,
price: 10,
amount: 400
}];
2条答案
按热度按时间6vl6ewon1#
可以将
#each
循环内的值绑定到单个item
的属性该属性尚不存在,但由于在
Counter
中设置了默认值它将被初始化为零。所有对金额的更改都将直接更改
items
。因此,在purchase
中,只需过滤items
中的金额REPL
mbjcgjjk2#
您可能希望在获取数据后将所有项的
amount
属性初始化为0
,然后将其绑定到Counter
:bind
将更改从组件传播到条目对象。在
purchase
中,您只需要过滤项目,类似于: