首頁  >  文章  >  web前端  >  VUE3開發基礎:使用Vue.js外掛程式封裝資料表元件

VUE3開發基礎:使用Vue.js外掛程式封裝資料表元件

PHPz
PHPz原創
2023-06-15 08:21:231908瀏覽

在Vue3開發中,資料表格是一個最基礎、常用的元件之一。在實際應用開發中,我們經常需要處理、展示大量的數據。而資料表格元件可以依照資料格式,對資料進行優雅的分頁、排序​​、篩選等操作,滿足資料視覺化展示的需求。

Vue.js作為一門流行的前端框架,本身提供了許多實用的元件和API。然而,隨著業務需求的不斷增加,可能會出現一些無法滿足需求的情況。這時候,我們可以藉助Vue.js外掛機制,開發一些自訂的元件,來實現特殊業務需求。

下面,本文將介紹如何使用Vue.js外掛機制,封裝一個資料表格元件,並實作以下功能:

  1. 分頁展示資料
  2. 排序表格數據
  3. 篩選表格數據
  4. 分頁展示數據

對於大量數據的展示,一次渲染所有數據,會導致頁面加載變慢,性能下降。因此,我們需要分頁展示數據。這裡我們可以藉助Vue.js外掛——「vuejs-paginate」。這個外掛程式可以將陣列資料依照指定的分頁參數分割,並提供資料展示和切換頁碼的功能。

在安裝完「vuejs-paginate」外掛程式後,我們需要對其進行初始化配置。具體配置如下:

import Vue from 'vue'
import Paginate from 'vuejs-paginate'

// 全局注册分页组件
Vue.component('paginate', Paginate);

// 分页参数配置
var options = {
  perPage: 10,
  perPageValues: [10, 20, 50],
  containerClass: 'pagination',
  infoClass: 'pagination__info',
  paginationClass: 'pagination__list',
  itemClass: 'pagination__item',
  linkClass: 'pagination__link'
}

// 定义分页组件
Vue.component('my-paginate', {
  components: {
    Paginate
  },
  props: {
    items: {
      type: Array, // 数据类型为数组
      required: true // 验证数据必传
    }
  },
  data() {
    return {
      currentPage: 1, // 当前页码
      options: options // 分页参数
    }
  },
  computed: {
    // 分页处理后的数据
    paginatedItems() {
      var start = (this.currentPage - 1) * this.options.perPage;
      var end = start + this.options.perPage;
      return this.items.slice(start, end);
    }
  }
})

透過上述程式碼就可以定義一個名為「my-paginate」的自訂分頁元件,並且全域註冊了「vuejs-paginate」外掛程式。這個分頁元件所需要的參數就是一個陣列類型的資料。其內部透過computed計算屬性,對數組資料進行分頁處理,而不是一次渲染所有資料。

2.排序表格資料

將表格中的資料排序,最簡單的方式是將陣列資料排序後再渲染到表格上。 Vue3提供了一個函數—”computed“,可以對資料進行排序,自動監聽資料變化並重新渲染。

下面我們來定義一個可以對表格資料進行排序的元件,並實現升降序的切換功能。

Vue.component('my-sorter', {
  props: {
    data: {
      type: Array,
      required: true
    },
    sortIndex: {
      type: Number, // 数字类型
      required: true
    }
  },
  data() {
    return { 
      direction: true // 排序切换方向
    }
  },
  computed: {
    sortedData() { // 数据排序处理
      var copyData = Object.assign([], this.data); // 浅拷贝数组
      var direction = this.direction ? 1 : -1; // 升序或降序
      copyData.sort(function(a, b) {
        if (a[this.sortIndex] < b[this.sortIndex]) return -1 * direction;
        if (a[this.sortIndex] > b[this.sortIndex]) return direction;
        return 0
      }.bind(this))
      return copyData;
    }
  },
  methods: {
    // 点击表头,切换排序方向
    toggle() {
      this.direction = !this.direction;
    }
  },
  template: `
    <th @click="toggle">
      {{ $slots.default[0].text }} 
      <i v-if="direction" class="glyphicon glyphicon-chevron-up"></i>
      <i v-else class="glyphicon glyphicon-chevron-down"></i>
    </th>
  `
})

3.篩選表格資料

我們可以為表格新增一個搜尋框,實現根據關鍵字對表格資料進行篩選的功能。 Vue3在過濾資料方面,提供了一個很好用的函數-「computed」。

Vue.component('my-filter', {
  props: {
    data: {
      type: Array,
      required: true
    }
  },
  data() {
    return {
      search: ''
    }
  },
  computed: {
    filteredData() {
      var searchKey = this.search.toLowerCase();
      return this.data.filter(item => {
        // 遍历数组内的每一项,如果包含搜索关键词,就保留这一项数据
        return Object.keys(item).some(key => {
          return String(item[key]).toLowerCase().indexOf(searchKey) > -1
        })
      })
    }
  },
  template: `
    <div>
      <input v-model="search" class="form-control" type="text" placeholder="搜索...">
      <table class="table table-bordered">
      <thead>
        <slot name="thead"></slot>
      </thead>
      <tbody>
        <tr v-for="item in filteredData">
          <slot name="tbody" :item="item"></slot>
        </tr>
      </tbody>
      </table>
    </div>
  `
})

以上程式碼是一個簡單的篩選元件。透過computed計算函數和v-model雙向綁定,可以對輸入的關鍵字進行過濾,並即時刷新篩選後的表格顯示效果。

總結:

透過上述例子,我們對如何開發Vue3外掛程式進行了簡單的介紹,並利用外掛機制來封裝了一個資料表元件。同時,我們也展示如何透過computed計算函數、v-model綁定、插槽等方式實現了分頁、排序​​、篩選表格資料等資料處理功能。這樣的插件化開發方式,可以使我們的程式碼結構更清晰,元件復用性更高,也對專案維護和升級起到了積極的作用。

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

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