最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于Vue3實(shí)現(xiàn)動(dòng)態(tài)表格的完整指南

 更新時(shí)間:2026年05月29日 09:23:10   作者:幸運(yùn)小圣  
動(dòng)態(tài)表格是一種在運(yùn)行時(shí)可生成或修改的表格,持排序、篩選、分頁(yè)和編輯等復(fù)雜交互,下面我們就來(lái)看看如何在Vue3中具體實(shí)現(xiàn)動(dòng)態(tài)表格的完整步驟吧

什么是動(dòng)態(tài)表格

動(dòng)態(tài)表格(Dynamic Table)是指:

  • 表格結(jié)構(gòu)和內(nèi)容在運(yùn)行時(shí)可以動(dòng)態(tài)生成或修改。
  • 表頭和數(shù)據(jù)行不固定,可根據(jù)后端接口或前端邏輯生成。
  • 支持排序、篩選、分頁(yè)、可編輯、操作按鈕等復(fù)雜交互。

區(qū)別于靜態(tài)表格:靜態(tài)表格表頭固定,無(wú)法靈活應(yīng)對(duì)動(dòng)態(tài)數(shù)據(jù)。

使用場(chǎng)景

  • 管理后臺(tái)數(shù)據(jù)列表(用戶管理、訂單管理)
  • 數(shù)據(jù)報(bào)表系統(tǒng)
  • 可編輯的數(shù)據(jù)錄入表格
  • 數(shù)據(jù)對(duì)比與分析平臺(tái)

基礎(chǔ)實(shí)現(xiàn)方式

HTML + Vue 3

代碼展示:

最基礎(chǔ)的動(dòng)態(tài)表格實(shí)現(xiàn)方式是利用 Vue 3 的 v-for 渲染表頭和內(nèi)容:

<template>
  <table border="1">
    <thead>
      <tr>
        <th v-for="column in columns" :key="column.key">
          {{ column.label }}
        </th>
      </tr>
    </thead>
    <tbody>
      <tr v-for="row in tableData" :key="row.id">
        <td v-for="column in columns" :key="column.key">
          {{ row[column.key] }}
        </td>
      </tr>
    </tbody>
  </table>
</template>
<script setup>
import { ref } from 'vue'
const columns = ref([
  { key: 'id', label: 'ID' },
  { key: 'name', label: '姓名' },
  { key: 'age', label: '年齡' }
])
const tableData = ref([
  { id: 1, name: '張三', age: 18 },
  { id: 2, name: '李四', age: 22 },
  { id: 3, name: '王五', age: 20 }
])
</script>

特點(diǎn):

  • 表頭和內(nèi)容完全動(dòng)態(tài)生成
  • 可配合后端 API 動(dòng)態(tài)加載數(shù)據(jù)(響應(yīng)式數(shù)據(jù)綁定)

動(dòng)態(tài)表格常用功能

排序

可以使用數(shù)組的 sort 或第三方庫(kù)提供的排序功能

<th @click="sort('age')">年齡</th>
<script setup>
const sort = (key) => {
  tableData.value.sort((a, b) => a[key] - b[key])
}
</script>

篩選

使用 computed 來(lái)過(guò)濾數(shù)據(jù):

<input v-model="searchName" placeholder="搜索姓名" />
<tr v-for="row in filteredData" :key="row.id">
  ...
</tr>
<script setup>
import { ref, computed } from 'vue'
const searchName = ref('')
const filteredData = computed(() =>
  tableData.value.filter(row => row.name.includes(searchName.value))
)
</script>

分頁(yè)

簡(jiǎn)單的分頁(yè)邏輯:

const currentPage = ref(1)
const pageSize = ref(5)

const pagedData = computed(() => {
  const start = (currentPage.value - 1) * pageSize.value
  return tableData.value.slice(start, start + pageSize.value)
})

可編輯單元格

結(jié)合 v-model 實(shí)現(xiàn)單元格編輯:

<td v-for="column in columns" :key="column.key">
  <input v-model="row[column.key]" />
</td>

使用第三方庫(kù)實(shí)現(xiàn)動(dòng)態(tài)表格

Element Plus

<template>
  <el-input v-model="searchName" placeholder="搜索姓名" style="margin-bottom: 10px;" />
  <el-table :data="filteredData" style="width: 100%">
    <el-table-column prop="id" label="ID" sortable></el-table-column>
    <el-table-column prop="name" label="姓名" sortable>
      <template #default="{ row }">
        <el-input v-model="row.name"></el-input>
      </template>
    </el-table-column>
    <el-table-column prop="age" label="年齡" sortable></el-table-column>
    <el-table-column prop="email" label="郵箱"></el-table-column>
  </el-table>
  <el-pagination
    v-model:current-page="currentPage"
    :page-size="pageSize"
    :total="tableData.length"
    style="margin-top: 10px;"
  ></el-pagination>
</template>
<script setup>
import { ref, computed, onMounted } from 'vue'
import axios from 'axios'
const tableData = ref([])
const searchName = ref('')
const currentPage = ref(1)
const pageSize = ref(5)
onMounted(async () => {
  const res = await axios.get('/api/users')
  tableData.value = res.data
})
const filteredData = computed(() => {
  const filtered = tableData.value.filter(row => row.name.includes(searchName.value))
  const start = (currentPage.value - 1) * pageSize.value
  return filtered.slice(start, start + pageSize.value)
})
</script>

Naive UI

<template>
  <n-data-table
    :columns="columns"
    :data="tableData"
    :bordered="true"
  />
</template>
<script setup>
import { ref, h } from 'vue'
import { NButton } from 'naive-ui'
const columns = [
  { title: 'ID', key: 'id' },
  { title: '姓名', key: 'name' },
  { title: '年齡', key: 'age' },
  {
    title: '操作',
    key: 'actions',
    render(row) {
      return h(NButton, { type: 'primary', size: 'small', onClick: () => alert('編輯: ' + row.name) }, { default: () => '編輯' })
    }
  }
]
const tableData = ref([
  { id: 1, name: '張三', age: 18 },
  { id: 2, name: '李四', age: 22 }
])
</script>

特點(diǎn):

  • columns 配置化
  • 支持 render 自定義渲染單元格
  • 非常適合中后臺(tái)業(yè)務(wù)系統(tǒng)

性能優(yōu)化與注意事項(xiàng)

大數(shù)據(jù)量表格建議使用虛擬滾動(dòng)(Element Plus virtual-scroll 或 Naive UI virtual-scroll)

避免在 v-for 中寫復(fù)雜邏輯,尤其是計(jì)算密集型操作

分頁(yè)、篩選盡量在服務(wù)端處理,避免一次性加載全部數(shù)據(jù)

自定義操作列用 render或插槽,保持表格組件可復(fù)用

到此這篇關(guān)于基于Vue3實(shí)現(xiàn)動(dòng)態(tài)表格的完整指南的文章就介紹到這了,更多相關(guān)Vue3動(dòng)態(tài)表格內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • element?時(shí)間選擇器禁用選擇的使用示例

    element?時(shí)間選擇器禁用選擇的使用示例

    最近做項(xiàng)目遇到的一個(gè)功能,禁止用戶在輸入內(nèi)容的時(shí)候選擇今天以前的日期或者包含今日的日期,本文主要介紹了element?時(shí)間選擇器禁用選擇的使用示例,感興趣的可以了解一下
    2023-09-09
  • Vue關(guān)于訪問(wèn)外鏈?zhǔn)〉膯?wèn)題

    Vue關(guān)于訪問(wèn)外鏈?zhǔn)〉膯?wèn)題

    這篇文章主要介紹了Vue關(guān)于訪問(wèn)外鏈?zhǔn)〉膯?wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue大數(shù)據(jù)表格卡頓問(wèn)題的完美解決方案

    vue大數(shù)據(jù)表格卡頓問(wèn)題的完美解決方案

    這篇文章主要給大家介紹了基于vue大數(shù)據(jù)表格卡頓問(wèn)題的完美解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • vuex的幾個(gè)屬性及其使用傳參方式

    vuex的幾個(gè)屬性及其使用傳參方式

    這篇文章主要介紹了vuex的幾個(gè)屬性及其使用傳參,本文結(jié)合實(shí)例代碼給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • Vue中的.vue文件的使用方式

    Vue中的.vue文件的使用方式

    這篇文章主要介紹了Vue中的.vue文件的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • vue實(shí)現(xiàn)城市列表選擇功能

    vue實(shí)現(xiàn)城市列表選擇功能

    這篇文章主要介紹了vue實(shí)現(xiàn)城市列表選擇功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-07-07
  • vue使用el-upload上傳文件及Feign服務(wù)間傳遞文件的方法

    vue使用el-upload上傳文件及Feign服務(wù)間傳遞文件的方法

    這篇文章主要介紹了vue使用el-upload上傳文件及Feign服務(wù)間傳遞文件的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-03-03
  • 詳解前后端分離之VueJS前端

    詳解前后端分離之VueJS前端

    本篇文章主要介紹了詳解前后端分離之VueJS前端,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Vue 打包的靜態(tài)文件不能直接運(yùn)行的原因及解決辦法

    Vue 打包的靜態(tài)文件不能直接運(yùn)行的原因及解決辦法

    這篇文章主要介紹了Vue 打包的靜態(tài)文件不能直接運(yùn)行的原因及解決辦法,幫助大家更好的理解和學(xué)習(xí)vue框架,感興趣的朋友可以了解下
    2020-11-11
  • Vue項(xiàng)目如何關(guān)閉語(yǔ)法檢查

    Vue項(xiàng)目如何關(guān)閉語(yǔ)法檢查

    這篇文章主要介紹了Vue項(xiàng)目如何關(guān)閉語(yǔ)法檢查問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04

最新評(píng)論

南京市| 陆丰市| 包头市| 永和县| 清水县| 侯马市| 古丈县| 济南市| 孝感市| 临泉县| 昆明市| 轮台县| 中西区| 沙雅县| 汕头市| 安康市| 信阳市| 正阳县| 馆陶县| 正镶白旗| 河西区| 丰县| 吴江市| 建宁县| 西丰县| 黎城县| 苍山县| 武宣县| 徐水县| 屏东市| 湖州市| 广河县| 金沙县| 南陵县| 陆丰市| 金华市| 正镶白旗| 双柏县| 长宁区| 化隆| 兴安盟|