vue.js - Vuejs 在输入更改时设置 v-model
问题描述
我想拥有v-model
并value
设置一个输入。这是我的代码:
<td>
<input v-model="invoice.items[n-1].net_price" type="number" step="0.01" min="1" form="invoice-form">
</td>
<td v-if="invoice.items[n-1].net_price && invoice.items[n-1].quantity">
<input :value="(invoice.items[n-1].net_price * invoice.items[n-1].quantity).toFixed(2)" type="text" form="invoice-form" readonly>
</td>
<td v-else>
<input type="text" readonly>
</td>
问题在于第二个输入。现在它是这样工作的:
- 您在输入中输入
net-price
值 - 您输入数量
- 它计算一个值并将其设置在
readonly
输入中
现在我想设置v-model
第二个输入,但是当我尝试这样做时出现错误。有没有办法将模型设置为这个计算值?
解决方案
一种更强大的方法可能是将您的计算逻辑放入一个方法中,并使用解构赋值来解包各个项目的值。此外,变量还可以在解压后的值是默认值undefined
的情况下分配——这样,您不再需要担心计算值返回NaN
,因为它们会回退到零。
尝试这样的事情:
new Vue({
data: () => ({
invoice: {
items: [
{
net_price: 30.05,
quantity: 4
},
{
net_price: 14.99,
quantity: 7
},
]
}
}),
methods: {
calculate({ net_price = 0, quantity = 0}) {
return (net_price * quantity).toFixed(2);
}
}
})
.$mount('#app');
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="app">
<form id="invoice-form">
<table>
<thead>
<tr>
<th>Net Price</th>
<th>Quantity</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<tr v-for="(item, index) of invoice.items" :key="index">
<td>
<input v-model="item.net_price" type="number" step="0.01" min="1" form="invoice-form" />
</td>
<td>
<input v-model="item.quantity" type="number" min="0" form="invoice-form" />
</td>
<td>
<input :value="calculate(item)" form="invoice-form" readonly />
</td>
</tr>
</tbody>
</table>
</form>
</div>
推荐阅读
- python - 在 Apache Beam 中导入 Google Firestore Python 客户端
- javascript - chart.js 中的散点图:如何仅显示特定点的图例
- java - 如何将 BufferedReader 写入 slf4j 记录器
- c# - 传递强命名参数的最佳方法?
- java - Kotlin 属性未初始化,但为什么呢?
- javascript - 如何用变量定义范围?
- android - 我有这样的问题,没有看到库(import android.support.v7.widget.RecyclerView;)
- python - 如何在 Django 中将表单的初始值设置为 html 或模板语言?
- c++ - 在 Mac OS 上使用 C/C++ 获得鼠标跟踪速度
- sqlite - 为什么给出“参数计数不匹配”错误?