Vuetify Vuex에서 API의 외부 데이터와 함께 데이터 테이블을 사용합니다.
Vuex에서 vuetify 프레임워크를 사용하고 싶은데 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
가능한 한.그것은 많은 계산을 초래할 수 있다.
이것이 Vuetify v1.5라고 가정할 때 데이터 테이블에 관한 전체 항목에 관한 문서에는 다음과 같이 기술되어 있습니다.
주의: 빈 문자열에 바인딩하거나 검색과 함께 사용하면 예기치 않은 동작이 발생합니다.
테이블에서 '검색' 소품을 제거하면 레코드 수가 다시 표시됩니다.외부 작업을 수행할 경우 기본 검색 기능이 필요하지 않습니다.
언급URL : https://stackoverflow.com/questions/49080814/vuetify-using-datatable-with-external-data-from-an-api-with-vuex
'programing' 카테고리의 다른 글
Vue 로딩 시 이미지를 페이드하는 방법 (0) | 2022.08.19 |
---|---|
푸셔 사용 시 Larabel 5.7의 '/broadcasting/auth 401(Unauthorized)' 오류를 수정하는 방법 (0) | 2022.08.19 |
vue.js 템플릿 내의 php 어레이에 액세스합니다. (0) | 2022.08.18 |
Java에서 바이트 배열을 정수로 변환하거나 그 반대로 변환합니다. (0) | 2022.08.18 |
malloc/free/new/delete에서 컴파일러가 메모리를 0xCD, 0xDD 등으로 초기화하는 시기와 이유는 무엇입니까? (0) | 2022.08.18 |