首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用vuetify data table动态显示/隐藏vue中的表列

使用vuetify data table动态显示/隐藏vue中的表列
EN

Stack Overflow用户
提问于 2020-06-07 23:36:53
回答 2查看 752关注 0票数 0

看起来像示例:

How to show hide columns of vuetify data table using v-select list

我做了一些非常类似的事情,但由于某些原因,当我更改标题数据时,表不会重新呈现:

https://codepen.io/Meff1/pen/vYLNYWR

代码语言:javascript
复制
<template>
  <v-container>
    <v-select v-model="value" :items="headers" label="Select Item" multiple return-object>
      <template v-slot:selection="{ item, index }">
        <v-chip v-if="index === 0">
          <span>{{ item.text }}</span>
        </v-chip>
        <span v-if="index === 1">(+{{ value.length - 1 }} others)</span>
      </template>
    </v-select>
    <br />
    <v-data-table :headers="this.selectedHeaders" :items="xyz">
      <template slot="items" slot-scope="props">
        <td
          v-for="header in this.selectedHeaders"
          :key="header"
          v-show="show[header.text]"
        >{{ props.item[header.value] }}</td>
      </template>
    </v-data-table>
  </v-container>
</template>


<script lang="ts">
const charData: Array<object> = [
  {
    id: 10,
    firstName: "Kyle",
    lastName: "Broflovski",
    saying: "Goddamnit Cartman!"
  },
  {
    id: 20,
    firstName: "Eric",
    lastName: "Cartman",
    saying: "Screw you guys, Im going home"
  },
  {
    id: 30,
    firstName: "Stanley",
    lastName: "Marsh",
    saying: "WTF"
  },
  {
    id: 40,
    firstName: "Kenny",
    lastName: "McCormick",
    saying: "hmhpmhphmphmhp"
  }
];

let headers: Array<object> = [];
let selectedHeaders: Array<object> = [];
const show: any = {};
const value: Array<object> = [];
let selectedData: Array<object> = [];

import Vue from "vue";

export default Vue.extend({
  name: "PFTable",
  data: () => ({
    charData,
    headers,
    value,
    selectedHeaders,
    selectedData,
    show
  }),

  computed: {
    xyz: () => {
      return selectedData;
    }
  },

  watch: {
    value(val) {
      selectedHeaders = val;

      const res = selectedHeaders.map(x => x.text);
      selectedData = [];

      for (const k in charData) {
        const element: any = charData[k];

        const filtered = Object.keys(element)
          .filter(key => res.includes(key))
          .reduce((obj: any, key: any) => {
            obj[key] = element[key];
            return obj;
          }, {});

        selectedData.push(filtered);
      }
    }
  },

  beforeCreate() {
    headers = [];
    const headersData = Object.keys(charData[0]);

    headersData.forEach(element => {
      headers.push({ text: element, value: element });
    });

    selectedHeaders = headers;
    selectedData = charData;
  }
});
</script>

我找不到任何方法来显示/隐藏在选择列表中选择的列。

我有selectedData数组,它作为数据表的items属性绑定到数据表。selectedData作为计算属性返回,并在选择列表更改时在watcher方法中更改。但是,数据表永远不会更新。当底层属性发生变化时,计算属性不应该重新求值吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-08 15:24:22

我想你在给你的outa作用域selectedHeaders赋值后,在你的观察器中释放了对this.selectedHeaders的引用?因此,您的模板永远不会得到任何更改,并按预期运行。

更改:

代码语言:javascript
复制
watch: {
   value(val) {
      selectedHeaders = val;

代码语言:javascript
复制
     selectedHeaders.splice(0).push(...val) 

代码语言:javascript
复制
     this.selectedHeaders = val
票数 1
EN

Stack Overflow用户

发布于 2020-06-08 00:01:38

尝试在data()方法中初始化数据

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62247708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档