Таблица данных 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

Другие вопросы по тегам