首頁  >  文章  >  web前端  >  VUE3基礎教學:使用Vue.js外掛程式封裝table元件

VUE3基礎教學:使用Vue.js外掛程式封裝table元件

WBOY
WBOY原創
2023-06-16 09:44:441344瀏覽

隨著前後端分離開發的流行,前端框架及工具也逐漸發展成為一個相對獨立的體系,其中Vue.js作為其中的佼佼者吸引了越來越多的開發者的關注與使用。本文將基於Vue.js 3.x版本,介紹如何使用Vue.js外掛程式來封裝一個table元件。

確定需求

在使用Vue.js來封裝一個table元件之前,首先需要確定該元件的需求及功能。我們可以列出下面的需求:

  • 支援動態輸入數據,並根據數據產生table
  • #支援根據table頭部資訊進行列排序
  • 支援搜尋功能,並根據關鍵字篩選出目標資料
  • 支援分頁功能

在明確了需求及功能後,我們開始進入正式的開發階段。

寫Vue.js外掛

在Vue.js中,外掛程式是擁有install方法的javascript物件。當插件被註冊後,該install方法將會被調用,我們可以在該方法中進行全域元件、指令或添加實例方法等。

我們將該插件命名為VueTablePlugin,以下就來建立這個vue外掛程式。

const VueTablePlugin = {
  install: function (Vue) {
    // 全局组件
    Vue.component('vue-table', {
      // 组件选项
    })
  }
}

好的,現在我們已經建立完成了vue插件,下面我們來新增元件選項。

編寫table元件

由於table元件需要支援動態資料顯示及搜尋、排序、分頁等功能,因此我們需要在元件內部進行一系列的處理。首先,我們可以定義元件的一些選項及props:

Vue.component('vue-table', {
  props: {
    data: Array,   // 父组件传入的数据
    columns: Array // table头部信息
  },
  data () {
    return {
      searchKey: '',   // 搜索关键字
      sortKey: '',     // 排序关键字
      current: 1,      // 当前页
      pageSize: 5,     // 每页显示数量
    }
  },
  computed: {
    filteredData: function () {
      return this.data.filter((row) => {
        return Object.values(row).some(val => {
          return String(val).includes(this.searchKey)
        })
      })
    },
    sortedData: function () {
      if (!this.sortKey) {
        return this.filteredData
      }
      return this.filteredData.sort((a, b) => {
        a = a[this.sortKey]
        b = b[this.sortKey]
        return a === b ? 0 : a > b ? 1 : -1
      })
    },
    pageCount: function () {
      return Math.ceil(this.filteredData.length / this.pageSize)
    },
    paginatedData: function () {
      const start = (this.current - 1) * this.pageSize
      return this.sortedData.slice(start, start + this.pageSize)
    }
  },
  methods: {
    sortBy (key) {
      this.sortKey = key
      this.current = 1
    },
    prevPage () {
      this.current--
      if (this.current < 1) this.current = 1
    },
    nextPage () {
      this.current++
      if (this.current > this.pageCount) this.current = this.pageCount
    }
  },
  template: `
    <table>
      <thead>
        <tr>
          <th v-for="col in columns"
              :key="col.key"
              @click="sortBy(col.key)"
              :class="{active: sortKey === col.key}">
            {{ col.name }}
          </th>
        </tr>
        <tr>
          <th v-for="col in columns">
            <input type="text" v-model="searchKey">
          </th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="row in paginatedData" :key="row.id">
          <td v-for="col in columns" :key="col.key">
            {{ row[col.key] }}
          </td>
        </tr>
      </tbody>
      <tfoot>
        <tr>
          <td colspan="100%">
            <button @click="prevPage">Prev</button>
            <button @click="nextPage">Next</button>
          </td>
        </tr>
      </tfoot>
    </table>
  `
})

由於我們在插件中編寫table元件,因此在使用該元件時不需要在引入任何的元件,我們只需要在任意vue實例下註冊該插件即可使用該元件。

使用table元件

在上面建立了我們的vue外掛程式及table元件後,我們就可以輕鬆地在任意vue實例中使用該元件了,具體操作如下:

在使用該元件的vue實例中引入vue-table-plugin:

import VueTablePlugin from './path/to/vue-table-plugin.js'

然後在vue實例中註冊插件:

Vue.use(VueTablePlugin)

這樣,在該vue實例下就可以輕鬆地使用vue-table元件了:

<template>
  <div>
    <vue-table :data="tableData" :columns="columns"></vue-table>
  </div>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { id: 1, name: 'John Doe', age: 29, occupation: 'Software Engineer' },
        { id: 2, name: 'Jane Doe', age: 30, occupation: 'Graphic Designer' },
        { id: 3, name: 'Aaron Lee', age: 25, occupation: 'Web Developer' },
        { id: 4, name: 'Amanda Smith', age: 27, occupation: 'UI Designer' },
        { id: 5, name: 'Jack Ma', age: 55, occupation: 'Entrepreneur' },
        { id: 6, name: 'Elon Musk', age: 49, occupation: 'Inventor' },
        { id: 7, name: 'Stephen Hawking', age: 76, occupation: 'Physicist' },
        { id: 8, name: 'Albert Einstein', age: 76, occupation: 'Theoretical Physicist' }
      ],
      columns: [
        { name: 'ID', key: 'id' },
        { name: 'Name', key: 'name' },
        { name: 'Age', key: 'age' },
        { name: 'Occupation', key: 'occupation' }
      ]
    }
  }
}
</script>

這樣,我們就完成了一個簡單的vue-table元件的封裝,並且使用vue插件的方式進行了使用。在實際生產環境中,我們可以對其進行一定的優化及擴展,並開發出更靈活實用的table組件。

總結

本文其中的vue外掛程式及table元件只是初步的封裝,實際開發中還需要依照需求進行客製化及拓展,才能最終達到效果。建議在實際開發中進行實踐及拓展,不斷打磨自己的元件庫,提升自身的開發能力。

以上是VUE3基礎教學:使用Vue.js外掛程式封裝table元件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn