如何在不使用 vue.js 中的 <td> 的情况下在数据表列中添加文本字段
How to add text-field in datatable column without using <td> in vue.js
我正在使用 Vuetify 当前的 CRUD Datatable UI Component(与 Vue.js2 兼容)制作购物车,我正在尝试为两列添加一个 type="number"
文本字段 quantity
和 price
和 link 他们各自的价值来计算他们的总数。
在这里你可以看到它如何加,计算总和 来自 2 个静态值(我暂时用它来测试计算函数的小计计算), 和 delete以下代码没有问题:
HTML:
<template>
<v-layout align-start>
<v-flex>
<v-container grid-list-sm class="pa-4 white">
<v-layout row wrap>
<v-flex xs12 sm8 md8 lg8 xl8>
<v-text-field v-model="code" label="Barcode" @keyup.enter="searchBarcode()">
</v-text-field>
</v-flex>
<v-flex xs12 sm12 md12 lg12 xl12>
<v-data-table
:headers="headerDetails"
:items="detailsWithSubTotal"
hide-default-footer
class="elevation-1"
>
<template v-slot:item.delete="{ item }">
<v-icon small class="ml-3" @click="deleteDetail(details, item)">
delete
</v-icon>
</template>
<template v-slot:no-data>
<h3>There are no current products added on details.</h3>
</template>
</v-data-table>
</v-flex>
</v-layout>
</v-container>
</v-flex>
</v-layout>
</template>
JAVASCRIPT:
<script>
import axios from 'axios'
export default {
data() {
return {
headerDetails: [
{ text: 'Remove', value: 'delete', sortable: false },
{ text: 'Product', value: 'product', sortable: false },
{ text: 'Quantity', value: 'quantity', sortable: false },
{ text: 'Price', value: 'price', sortable: false },
{ text: 'Subtotal', value: 'subtotal', sortable: false }
],
details: [],
code: ''
}
},
computed: {
detailsWithSubTotal() {
return this.details.map((detail) => ({
...detail,
subtotal: detail.quantity * detail.price,
source: detail
}))
}
},
methods: {
searchBarcode() {
axios
.get('api/Products/SearchProductBarcode/' + this.code)
.then(function(response) {
this.addDetail(response.data)
})
.catch(function(error) {
console.log(error)
})
},
addDetail(data = []) {
this.details.push({
idproduct: data['idproduct'],
product: data['name'],
quantity: 10,
price: 150
})
},
deleteDetail(arr,item){
var i= arr.indexOf(item.source);
if (i!==-1){
arr.splice(i,1);
}
},
}
}
</script>
在我一直用作构建此购物车的参考示例中,他没有显示来自 javascript 的数据,而是来自 HTML 使用 <td>
和props.items
如您在下面的代码中所见:
上一版本(我找到的这个例子来自2岁以前的vue.js版本):
<template slot="items" slot-scope="props">
<td class="justify-center layout px-0">
<v-icon small class="ml-3" @click="deleteDetail(details, props.item)">
delete
</v-icon>
</td>
<td>{{ props.item.product }}</td>
<td><v-text-field type="number" v-model="props.item.quantity"></v-text-field></td>
<td><v-text-field type="number" v-model="props.item.price"></v-text-field></td>
<td>$ {{ props.item.quantity * props.item.price }}</td>
</template>
他的例子是这样的:
虽然这是我的数据表与我的代码的样子(使用硬编码的 quantity
和 price
值):
由于我没有使用任何 <td>
或任何 props
,我如何在数据表中实现文本字段并将它们 link 设置为它们的值能算出产品总和吗?
您只需要在 table 标签内添加模板,就像您对删除图标所做的一样,您需要确保它的 v-slot
名称与 [=17] 一样=] 你想把文本字段放在它下面。
<v-layout align-start>
<v-flex>
<v-container grid-list-sm class="pa-4 white">
<v-layout row wrap>
<v-flex xs12 sm8 md8 lg8 xl8>
<v-text-field v-model="code" label="Barcode" @keyup.enter="searchBarcode()">
</v-text-field>
</v-flex>
<v-flex xs12 sm12 md12 lg12 xl12>
<v-data-table
:headers="headerDetails"
:items="detailsWithSubTotal"
hide-default-footer
class="elevation-1"
>
<template v-slot:item.delete="{ item }">
<v-icon small class="ml-3" @click="deleteDetail(details, item)">
delete
</v-icon>
</template>
<template v-slot:item.quantity="{ item }">
<v-text-field v-model="item.quantity">
</v-text-field>
</template>
<template v-slot:no-data>
<h3>There are no current products added on details.</h3>
</template>
</v-data-table>
</v-flex>
</v-layout>
</v-container>
</v-flex>
</v-layout>
代码的结果如下所示:screenshot
我正在使用 Vuetify 当前的 CRUD Datatable UI Component(与 Vue.js2 兼容)制作购物车,我正在尝试为两列添加一个 type="number"
文本字段 quantity
和 price
和 link 他们各自的价值来计算他们的总数。
在这里你可以看到它如何加,计算总和 来自 2 个静态值(我暂时用它来测试计算函数的小计计算), 和 delete以下代码没有问题:
HTML:
<template>
<v-layout align-start>
<v-flex>
<v-container grid-list-sm class="pa-4 white">
<v-layout row wrap>
<v-flex xs12 sm8 md8 lg8 xl8>
<v-text-field v-model="code" label="Barcode" @keyup.enter="searchBarcode()">
</v-text-field>
</v-flex>
<v-flex xs12 sm12 md12 lg12 xl12>
<v-data-table
:headers="headerDetails"
:items="detailsWithSubTotal"
hide-default-footer
class="elevation-1"
>
<template v-slot:item.delete="{ item }">
<v-icon small class="ml-3" @click="deleteDetail(details, item)">
delete
</v-icon>
</template>
<template v-slot:no-data>
<h3>There are no current products added on details.</h3>
</template>
</v-data-table>
</v-flex>
</v-layout>
</v-container>
</v-flex>
</v-layout>
</template>
JAVASCRIPT:
<script>
import axios from 'axios'
export default {
data() {
return {
headerDetails: [
{ text: 'Remove', value: 'delete', sortable: false },
{ text: 'Product', value: 'product', sortable: false },
{ text: 'Quantity', value: 'quantity', sortable: false },
{ text: 'Price', value: 'price', sortable: false },
{ text: 'Subtotal', value: 'subtotal', sortable: false }
],
details: [],
code: ''
}
},
computed: {
detailsWithSubTotal() {
return this.details.map((detail) => ({
...detail,
subtotal: detail.quantity * detail.price,
source: detail
}))
}
},
methods: {
searchBarcode() {
axios
.get('api/Products/SearchProductBarcode/' + this.code)
.then(function(response) {
this.addDetail(response.data)
})
.catch(function(error) {
console.log(error)
})
},
addDetail(data = []) {
this.details.push({
idproduct: data['idproduct'],
product: data['name'],
quantity: 10,
price: 150
})
},
deleteDetail(arr,item){
var i= arr.indexOf(item.source);
if (i!==-1){
arr.splice(i,1);
}
},
}
}
</script>
在我一直用作构建此购物车的参考示例中,他没有显示来自 javascript 的数据,而是来自 HTML 使用 <td>
和props.items
如您在下面的代码中所见:
上一版本(我找到的这个例子来自2岁以前的vue.js版本):
<template slot="items" slot-scope="props">
<td class="justify-center layout px-0">
<v-icon small class="ml-3" @click="deleteDetail(details, props.item)">
delete
</v-icon>
</td>
<td>{{ props.item.product }}</td>
<td><v-text-field type="number" v-model="props.item.quantity"></v-text-field></td>
<td><v-text-field type="number" v-model="props.item.price"></v-text-field></td>
<td>$ {{ props.item.quantity * props.item.price }}</td>
</template>
他的例子是这样的:
虽然这是我的数据表与我的代码的样子(使用硬编码的 quantity
和 price
值):
由于我没有使用任何 <td>
或任何 props
,我如何在数据表中实现文本字段并将它们 link 设置为它们的值能算出产品总和吗?
您只需要在 table 标签内添加模板,就像您对删除图标所做的一样,您需要确保它的 v-slot
名称与 [=17] 一样=] 你想把文本字段放在它下面。
<v-layout align-start>
<v-flex>
<v-container grid-list-sm class="pa-4 white">
<v-layout row wrap>
<v-flex xs12 sm8 md8 lg8 xl8>
<v-text-field v-model="code" label="Barcode" @keyup.enter="searchBarcode()">
</v-text-field>
</v-flex>
<v-flex xs12 sm12 md12 lg12 xl12>
<v-data-table
:headers="headerDetails"
:items="detailsWithSubTotal"
hide-default-footer
class="elevation-1"
>
<template v-slot:item.delete="{ item }">
<v-icon small class="ml-3" @click="deleteDetail(details, item)">
delete
</v-icon>
</template>
<template v-slot:item.quantity="{ item }">
<v-text-field v-model="item.quantity">
</v-text-field>
</template>
<template v-slot:no-data>
<h3>There are no current products added on details.</h3>
</template>
</v-data-table>
</v-flex>
</v-layout>
</v-container>
</v-flex>
</v-layout>
代码的结果如下所示:screenshot