Vue.js数据表仅在第一列中显示数据

时间:2018-08-04 04:24:37

标签: javascript vue.js vue-component vuex

我正在尝试遍历使用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>

    从“ vuex”导入{mapState}

  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是正在发出axios请求的vuex存储。现在,我知道将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)
      })
    }
    }
    })

enter image description here

1 个答案:

答案 0 :(得分:0)

实际上,您需要删除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