引导表标题在Vuejs组件中没有正确对齐

4xy9mtcn  于 2023-04-12  发布在  Vue.js
关注(0)|答案(1)|浏览(197)

当使用vuedragable包来启用列的拖动和重新排序时,如何使Vue.js DataGrid组件的标题和列体正确对齐?
下面是我目前为DataGrid.vue组件编写的代码:

<template>
  <div class="table-responsive">
    <table class="table table-striped table-hover" v-if="selectedColumns.length > 0">
      <thead>
        <draggable :list="selectedColumns" group="columns" @end="onEnd">
          <th v-for="(column, index) in selectedColumns" :key="index">{{ column }}</th>
        </draggable>
      </thead>
      <tbody>
        <draggable v-model="mergedData" group="rows">
          <tr v-for="(data, index) in mergedData" :key="index">
            <td v-for="(column, index) in selectedColumns" :key="index">
              {{ data[column.toLowerCase().replace(' ', '_')] !== undefined ? data[column.toLowerCase().replace(' ', '_')] : 'N/A' }}
            </td>
          </tr>
        </draggable>
      </tbody>
    </table>
  </div>
</template>

<script>
import draggable from 'vuedraggable';

export default {
  name: 'DataGrid',
  components: {
    draggable,
  },
  props: {
    selectedColumns: {
      type: Array,
      required: true,
    },
    mergedData: {
      type: Array,
      required: true,
    },
  },
  methods: {
    onEnd(event) {
      const oldIndex = event.oldIndex;
      const newIndex = event.newIndex;
      this.selectedColumns.splice(newIndex, 0, this.selectedColumns.splice(oldIndex, 1)[0]);
    },
  },
};
</script>

<style scoped>
/* Add any custom styles here */
</style>

我已经尝试使用具有table-responsive类的div Package table元素,但标题和列体仍然没有正确对齐。如何在保持响应性和拖动功能的同时使表内容正确对齐?
我的当前表如下所示:

v8wbuo2f

v8wbuo2f1#

我能解决这个问题,
因为我使用的是vuedgraggable库,所以它会动态地 Package 我的<th>...</th>并添加一个额外的<div>
所以是这样的,

<thead>
 <tr>
  <div>
   <th></th> 
   ...
   ...
   ...
   <th></th>
  </div>
 </tr>
</thead>

它还用<div> Package 了<td>

<tbody>
 <div>
  <tr>
   <td></td>
   ...
   ...
   ...
   <td></td>
  </tr>
 </div>
</tbody>

所以我在我的vuejs组件中添加了以下CSS:

tbody > div:first-child {
    display: contents!important;
}
thead tr > div:first-child {
  display: contents!important;
}

这解决了我的标题和列内容对齐问题,保持拖动功能不变。

相关问题