本篇內容主要講解“Vue基于Element-ui怎么實現表格彈窗組件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Vue基于Element-ui怎么實現表格彈窗組件”吧!
效果圖

acTable1 () {
this.$modalTable({
title: "表格一",
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀區金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀區金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀區金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀區金沙江路 1516 弄'
}],
tableColumn: [
{
prop: "date",
label: "日期",
width: "180"
},
{
prop: "name",
label: "姓名",
},
{
prop: "address",
label: "地址",
}
]
})
},
acTable2 () {
this.$modalTable({
title: "表格二",
tableData: [],
tableColumn: [
{
prop: "date",
label: "日期",
width: "180"
},
{
prop: "name",
label: "姓名",
},
{
prop: "address",
label: "地址",
}
]
})
},
acTable3 () {
this.$modalTable({
title: "表格三",
tableData: [{
date: '2016-05-02',
name: '王小虎',
address: '上海市普陀區金沙江路 1518 弄'
}, {
date: '2016-05-04',
name: '王小虎',
address: '上海市普陀區金沙江路 1517 弄'
}, {
date: '2016-05-01',
name: '王小虎',
address: '上海市普陀區金沙江路 1519 弄'
}, {
date: '2016-05-03',
name: '王小虎',
address: '上海市普陀區金沙江路 1516 弄'
}],
tableColumn: [
{
prop: "name",
label: "姓名",
},
{
prop: "date",
label: "日期",
},
{
prop: "address",
label: "地址",
}
]
})
},1、創建modalTable.vue文件
將變量放在data中,正常開發即可,后續會通過別的方式將數據傳入組件data中。
<template>
<el-dialog ref="dialog"
:title="title"
:visible.sync="visible"
width="30%"
:before-close="beforeClose">
<el-table :data="tableData"
>
<el-table-column v-for="(item,index) in tableColumn"
:key="index"
:prop="item.prop"
:label="item.label"
:width="item.width">
</el-table-column>
</el-table>
<span slot="footer"
class="dialog-footer">
<el-button @click="closeDialog">關閉</el-button>
</span>
</el-dialog>
</template>
<script>
export default {
data () {
return {
visible: false,
vmId: 0,
title: "標題",
tableData: [],
tableColumn: []
};
},
methods: {
beforeClose (done) {
this.visible = false
// 從DOM里將這個組件移除
// visible只是控制了顯示與隱藏 但是dom結構中還是存在組件 為了避免消耗內存必須銷毀組件
// setTimeout(() => {
// console.log("this.$el.parentNode", this.$el.parentNode)
// console.log("this.$el", this.$el)
// this.$el.parentNode.removeChild(this.$el)
// }, 500)
setTimeout(() => {
if (typeof this.onClose === "function") {
this.onClose(this.vmId)
done()
}
}, 500);
},
closeDialog () {
this.$refs.dialog.handleClose()
}
}
};
</script>
<style lang="less" scoped>
</style>2、創建modalTable.js文件
在組件中沒有props接收參數,那么如何給modalTable組件傳參,這就需要一個modalTable.js 文件去管理modalTable.vue組件。
import Vue from "vue";
const constructor = Vue.extend(require('./modalTable.vue').default)
let nId = 1
let instances = []
const ModalTable = (options) => {
let id = 'table-' + nId++;
options = options || {};
console.log("options", options);
// 重點:綁定關閉事件
options.onClose = function (vmId) {
ModalTable.close(vmId)
}
// 實列化
const instance = new constructor({
//重點:在這里將你傳過來的參數匹配到modalTable.vue組件的data
data: {
...options,
vmId: id
}
})
console.log("instance", instance);
instance.id = id;
instance.$mount(); // 掛載但是并未插入dom,是一個完整的Vue實例
document.body.appendChild(instance.$el) // 將dom插入body
instance.visible = true //這里修改modalTable.vue數據中的visible,這樣modalTable組件就顯示出來
instances.push(instance)
return instance
};
ModalTable.close = function (vmId) {
console.log("vmId", vmId)
instances.forEach((instance, index) => {
if (instance.id == vmId) {
document.body.removeChild(instances[index].$el)
instances.splice(index, 1)
}
})
}
ModalTable.closeAll = function () {
for (let i = instances.length - 1; i >= 0; i--) {
instances[i].close()
}
}
export default ModalTable;3、在main.js文件中掛載vue原型鏈
import ModalTable from './components/modalTable/modalTable.js' Vue.prototype.$modalTable = ModalTable;
4、使用
最后就可以如上文的使用方法,通過原型鏈調用ModalTable組件了。
到此,相信大家對“Vue基于Element-ui怎么實現表格彈窗組件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。