我们在用 ElementUI
开发前端时,有时我们需要使用到组件 Dropdown 下拉菜单
,比如在组件 Table 表格
的操作列中操作按钮较多的情况下,可以通过 Dropdown
来展示更多操作按钮。然而其点击菜单项触发的事件回调 command
只有一个参数,但是我们至少还需要传入行数据来区分是操作哪一行的数据,这时只能通过变通给 dropdown-menu
的属性 command
传入对象,将需要的字段都放入该对象,具体代码如下:
<el-table>
<el-table-column label="操作" align="center" fixed="right">
<template slot-scope="scope">
<el-button type="text" size="small">详情</el-button>
<el-button type="text" size="small">编辑</el-button>
<el-dropdown @command="handleCommand">
<el-button type="text" size="small">
更多操作<i class="el-icon-arrow-down el-icon--right" />
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item
v-for="(item, index) in opBtns"
:key="index"
:command="{ command: item.value, fn: item.fn, row: scope.row }"
:disabled="item.disabled"
:divided="item.divided">{{ item.text }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<script>
export default {
data() {
return {
opBtns: [
{
value: 'v1',
text: '操作1',
fn: 'fn1'
},
{
value: 'v2',
text: '操作2',
fn: 'fn2'
},
{
value: 'v3',
text: '操作3',
disabled: true
},
{
value: 'v4',
text: '操作4',
fn: 'fn4',
divided: true
},
{
value: 'v5',
text: '操作5',
fn: 'fn5'
}
]
}
},
methods: {
handleCommand(commandObj) { // 点击菜单项触发的事件回调
const { command, fn, row } = commandObj
if (fn) {
const method = this.$options.methods[fn] // 获取对应操作函数
method && method.call(this, row) // 执行对应的操作函数
}
},
fn1(item) {
console.info(item, 'fn1')
},
fn2(item) {
console.info(item, 'fn2')
}
}
}
</script>
为了方便,我们把 Dropdown
中的按钮操作处理函数也通过变量传递。
知识点:
this.$options.methods
:获取当前组件下method
内的所有函数。this.$options.methods.call(this, row)
:调用获取到的函数,并重新指定this
指向。
最终效果图: