Таблица данных Vue.js показывает только данные в первом столбце
Я пытаюсь перебрать объект, извлеченный из базы данных с помощью axios. Я могу отобразить объект в моей таблице данных, но не могу разбить данные на указанные столбцы.
Первый фрагмент является родительским компонентом. tr и td для фактического списка, который я выделил в отдельный компонент, но это, возможно, должно быть исправлено.
<template>
<div class="container">
<router-link to="/add" class="btn btn-primary btn-sm float-
right">AddClient</router-link>
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">#</th>
<th scope="col">Name</th>
<th scope="col">Type</th>
<th scope="col">Email</th>
<th scope="col">Phone</th>
<th></th>
</tr>
</thead>
<client-info></client-info>
</table>
</div>
</template>
<script>
import ClientInfo from '@/components/clientslistexperience/ClientInfo'
export default {
name: 'ClientsList',
components: {
ClientInfo
},
methods: {
},
}
</script>
enter code here
Следующим является компонент, перебирающий данные для отображения в таблице.
<template>
<div class="client-info">
<tbody>
<tr v-for="(client, index) in clients" v-bind:key="index"
:client="client">
<th scope="row">{{ client.id }}</th>
<td>{{ client.name }}</td>
<td>{{ client.type }}</td>
<td>{{ client.email }}</td>
<td>{{ client.phone }}</td>
</tr>
</tbody>
</div>
import { mapState } из 'vuex'
export default {
name: 'client-info',
props: {
id: Array,
type: String,
name: String,
email: String,
phone: Number,
},
computed: {
...mapState ([
'clients'
])
},
created() {
this.$store.dispatch('retrieveClients')
}
}
</script>
enter code here
last - хранилище vuex, в котором выполняется запрос axios. теперь я знаю, что использование vuex для небольших проектов - это просто убийство, но я собираюсь сделать так, чтобы оно стало довольно большим, поэтому этот метод я выбрал. любая помощь будет потрясающей! Благодарю.
import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'
Vue.use(Vuex)
axios.defaults.baseURL = 'http://client-api.test/api'
export default new Vuex.Store({
state: {
clients: []
},
mutations: {
retrieveClients(state, clients) {
state.clients = clients
},
},
actions: {
retrieveClients(context) {
axios.get('/clients')
.then(response => {
// console.log(response)
context.commit('retrieveClients', response.data)
})
.catch(error => {
console.log(error)
})
}
}
})
1 ответ
На самом деле, вам нужно удалить div
корневой элемент в вашем ClientInfo.vue
составная часть. Заменить div
от tbody
и это решит вашу проблему;)
<template>
<tbody class="client-info">
<tr v-for="(client, index) in clients"
:key="index">
<td>{{ client.id }}</td>
<td>{{ client.name }}</td>
<td>{{ client.type }}</td>
<td>{{ client.email }}</td>
<td>{{ client.phone }}</td>
</tr>
</tbody>
</template>
Полная демонстрация здесь> https://codesandbox.io/s/v8vw0z89r7