gpt4 book ai didi

vue.js - Vuetify 使用带有来自 API 的外部数据的数据表和 Vuex

转载 作者:搜寻专家 更新时间:2023-10-30 22:10:48 25 4
gpt4 key购买 nike

我想将 vuetify 框架与 Vuex 一起使用,但有关将它与 Vuex 一起使用的文档有限。

我想:

  • 从外部 API 获取数据(但只有需要的数据)
  • 然后以状态保存数据并进行编辑或其他操作
  • 然后将任何更改推送回 api

我已经使用 vuetify 尝试了一些外部分页和排序示例,但除非我对其进行硬编码,否则我无法让它显示所有记录数。

我对 Vue 和 Vuetify 很陌生,所以我可能误解了什么。

<template>
<div>
<v-data-table
:headers='headers'
:items='items'
:length='pages'
:search='search'
:pagination.sync='pagination'
:total-items='totalItemCount'
class='elevation-1'
>
<template slot='items' slot-scope='props'>
<td class='text-xs-right'>{{ props.item.id }}</td>
<td class='text-xs-right'>{{ props.item.first_name }}</td>
<td class='text-xs-right'>{{ props.item.last_name }}</td>
<td class='text-xs-right'>{{ props.item.avatar }}</td>
</template>
</v-data-table>
</div>
</template>
<script>
import moment from 'moment'
import axios from 'axios'

export default {
name: 'test-table',
watch: {
pagination: {
async handler () {
const rowsPerPage = this.pagination.rowsPerPage
// const skip = (this.pagination.page - 1) * rowsPerPage
const pageNumber = this.pagination.page
const res = await axios.get(`https://reqres.in/api/users?page=${pageNumber}&per_page=${rowsPerPage}`)
this.items = res.data.data
this.$store.commit('saveTableData', this.items)
},
deep: true
}
},
computed: {
pages () {
return 171
},
totalItemCount () {
return 400
}
},
async mounted () {
const rowsPerPage = this.pagination.rowsPerPage
const skip = (this.pagination.page - 1) * rowsPerPage
const res = await axios.get(`https://reqres.in/api/users?page=${skip}&per_page=${rowsPerPage}`)
this.items = res.data.data
this.$store.commit('saveTableData', this.items)
},
methods: {
nzDate: function (dt) {
return moment(dt).format('DD/MM/YYYY')
}
},
data: () => ({
search: '',
// totalItems: 0,
items: [],
pagination: {
sortBy: 'Date'
},
headers: [
{ text: 'ID', value: 'id' },
{ text: 'First Name', value: 'first_name' },
{ text: 'Last Name', value: 'last_name' },
{ text: 'Avatar', value: 'avatar' }
]
})
}

最佳答案

这是我的工作设置:

<template>
<v-data-table
:total-items="pagination.totalItems"
:pagination.sync="pagination"
:items="rows"
:headers="columns">
<template slot="headers" slot-scope="props">
<tr :active="props.selected">
<th v-for="column in props.headers">
{{ column.value }}
</th>
</tr>
</template>

<template slot="items" slot-scope="props">
<tr>
<td v-for="cell in props.item.row">
<v-edit-dialog lazy>
{{ cell.value }}
<v-text-field
:value="cell.value"
single-line
counter>
</v-text-field>
</v-edit-dialog>
</td>
</tr>
</template>
</v-data-table>
</template>

<script>
export default {
data: () => ({
pagination: {
page: 1,
rowsPerPage: 10,
totalItems: 0
},

selected: []
}),

computed: {
columns: {
get () {
return this.$store.state.columns
}
},

rows: {
get () {
return this.$store.state.rows
}
}
},

methods: {
async getRowsHandler () {
try {
const {total} = await this.$store.dispatch('getRows', {
tableIdentifier: this.$route.params.tableIdentifier,
page: this.pagination.page,
size: this.pagination.rowsPerPage
})

this.pagination.totalItems = total
} catch (error) {
// Error
}
}
}
}
</script>

我没有实现所有内容。如果您错过了某个特定部分,请再次询问,我会更新我的示例。还有一个提示:您应该尽可能避免使用 watch deep。这会导致繁重的计算。

关于vue.js - Vuetify 使用带有来自 API 的外部数据的数据表和 Vuex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49080814/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com