Vue中的混入 mixins 是一種提供分發 Vue 組件中可複用功能的很是靈活的方式。據說在3.0版本中可能會用Hooks的形式實現,但這並不妨礙它的強大。html
這裏主要來討論 mixins 如何優化咱們的數據列表代碼。vue
若是咱們有大量的表格頁面,仔細一扒拉你發現很是多的東西都是能夠複用的例如分頁,表格高度,加載方法, laoding 聲明等一大堆的東西。下面咱們來整理出來一個簡單通用混入 list.js
api
list.jspromise
const list = { data () { return { loading: false, pageParam: { pageNum: 1, // 頁碼 pageSize: 20, // 頁長 total: 0 // 總記錄數數 }, pageSizes: [10, 20, 30, 50], // 頁長數 pageLayout: 'total, sizes, prev, pager, next, jumper', // 分頁佈局 pageCount: 5, // 頁碼按鈕的數量,當總頁數超過該值時會摺疊(大於等於 5 且小於等於 21 的奇數) list: [] } }, methods: { // 分頁回掉事件 handleSizeChange (val) { this.pageParam.pageSize = val this.getList() }, handleCurrentChange (val) { this.pageParam.pageNum = val this.getList() }, /** * 表格數據請求成功的回調 處理完公共的部分(分頁,loading取消)以後把控制權交給頁面 * @param {*} apiResult * @returns {*} promise */ listSuccessCb (apiResult = {}) { return new Promise((resolve, reject) => { let tempList = [] // 臨時list try { this.loading = false tempList = apiResult.data this.pageParam.total = apiResult.page.total // 直接拋出 resolve(tempList) } catch (error) { reject(error) } }) }, /** * 處理異常狀況 * ==> 簡單處理 僅僅是對錶格處理爲空以及取消loading */ listExceptionCb (error) { this.loading = false console.error(error) } }, created () { // 這個生命週期是在使用組件的生命週期以前 this.$nextTick().then(() => { // todo }) } } export default list
下面咱們直接在組件中使用這個mixins
ide
import mixin from '@/mixins/list' // 引入 import {getList} from '@/api/demo' export default { name: 'mixins-demo', mixins: [mixin], // 使用mixins data () { return { } }, methods: { // 加載列表 getList () { const params = { ...this.searchForm, ...this.pageParam } fetchUserList(params).then(res => { if (res.code === 0) { this.listSuccessCb(res).then((list) => { this.list = list }).catch((err) => { console.log(err) }) } }) }, }, created() { this.load() } }
使用了 mixins 以後一個簡單的有 loadoing, 分頁,數據的表格大概就只須要上面這些代碼。佈局
在list.js
中咱們能夠直接調用組件的方法,好比在分頁回調事件中調用組件的 getList()
方法,在組件中直接調用 list.js
中的代碼,如直接訪問 this.pageParam
。fetch
當組件和 mixins 對象含有同名選項時,這些選項將以恰當的方式混合。好比,數據對象在內部會進行淺合併 (一層屬性深度),在和組件的數據發生衝突時以組件數據優先。優化
你學會了嗎?還不快試試。。。ui
全文完。this
關注公衆號,第一時間接收最新文章。若是對你有一點點幫助,能夠點喜歡點贊點收藏,還能夠小額打賞做者,以鼓勵做者寫出更多更好的文章。