【问题标题】:How do I update vuetify data table component with new data and new columns如何使用新数据和新列更新 vuetify 数据表组件
【发布时间】:2023-03-08 07:32:01
【问题描述】:

我想知道如何获取一个现有的(初始)v-data-table 组件,其中填充了 :headers 和 :items 道具,然后使用新数据和新列标题完全重新渲染组件?是否有特殊的更新或销毁原生 Vue 或 Vuetify 的方式来做到这一点?

我希望我的 UX 是:查看装载时创建的初始表,选择新列,单击更新,队列加载器图标,使用新项目和新标题重新呈现表。

提前致谢。

【问题讨论】:

  • 到目前为止您尝试过什么解决方案?
  • 停止疑惑,开始编码吧。你的问题明确表明你还没有尝试过任何事情。简而言之,只要您的 itemsheaders 是响应式的,对它们的任何更改都会相应地触发重新渲染。对于人眼来说,它是即时的,所以如果你想看到加载器图标,你需要在执行更新之前显示加载图标,显示它与你认为更新过程应该花费的一样多,然后隐藏它,更新数据。

标签: javascript vue.js frontend vuetify.js


【解决方案1】:

VDataTable 由您通过headersitems 提供给它的数据驱动。如果源发生变化,表格也会发生变化。所以,不要做任何其他事情,只需更新源(以反应方式)&您的表将根据提供给它的新数据集进行更新。

new Vue({
  el: '#app',
  vuetify: new Vuetify(),
  computed: {
    headers() {
      return this.items.length ? Object.keys(this.items[0]).map(key => ({
        value: key,
        text: key
      })) : []
    }
  },
  data() {
    return {
      items: []
    }
  },
  methods: {
    async fetchData(type) {
      const response = await fetch(`https://jsonplaceholder.typicode.com/${type}`)
      this.items = await response.json()
      console.log(this.items)
    },
  }
})
<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@4.x/css/materialdesignicons.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/vue@2.x/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/vuetify@2.x/dist/vuetify.js"></script>
<div id="app">
  <v-app>
    <v-main>
      <v-container>
        <v-row>
          <v-col>
            <v-btn-toggle>
              <v-btn @click="fetchData('users')">
                FETCH USERS
              </v-btn>
              <v-btn @click="fetchData('posts')">
                FETCH POSTS
              </v-btn>
            </v-btn-toggle>
          </v-col>
        </v-row>
        <v-row>
          <v-col>
            <v-data-table :headers="headers" :items="items" />
          </v-col>
        </v-row>
      </v-container>
    </v-main>
  </v-app>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-16
    • 2019-07-26
    • 2020-02-24
    • 1970-01-01
    • 2021-02-24
    • 2020-11-17
    • 2021-10-13
    相关资源
    最近更新 更多