el-popover 是ElementUI封裝的一個彈窗組件景殷,類似于el-tooltip溅呢,彈窗中也可以自定義內(nèi)容等澡屡。
它的打開方式由trigger屬性定義,引用官方文檔:trigger屬性用于設(shè)置何時觸發(fā) Popover藕届,支持四種觸發(fā)方式:hover挪蹭,click,focus 和 manual休偶。
對于觸發(fā) Popover 的元素梁厉,有兩種寫法:使用 slot="reference" 的具名插槽,或使用自定義指令v-popover指向 Popover 的索引ref踏兜。
el-popover trigger設(shè)置為manual,意為手動方式打開或關(guān)閉词顾。此時el-popover 需綁定一個布爾值,v-model="visible",來控制它打開關(guān)閉碱妆,觸發(fā) Popover 的元素需要綁定一個事件方法設(shè)置布爾值來控制其打開或關(guān)閉肉盹。(注意:trigger設(shè)置為manual時,無法通過點(diǎn)擊彈窗外的區(qū)域關(guān)閉彈窗疹尾。click可以通過點(diǎn)擊彈窗之外的區(qū)域關(guān)閉)
此時我的需求是,使用click方式觸發(fā)纳本,但是關(guān)閉時除了點(diǎn)擊彈窗之外的區(qū)域吓笙,也可以點(diǎn)擊彈窗內(nèi)的某個組件關(guān)閉面睛。
此時尊搬,可以直接在關(guān)閉事件方法中使用以下代碼,直接調(diào)用popover內(nèi)部的關(guān)閉方法亲茅。
this.$refs['popoverName'].doClose()
但是狗准,如果一個是在循環(huán)的組件中使用el-popover,例如table,或者v-for渲染的組件茵肃,此時直接使用上述代碼是有問題的。此時可以在循環(huán)時動態(tài)綁定el-popover的ref名稱捞附,關(guān)閉時就使用對應(yīng)的ref去調(diào)用事件
<el-popover
:ref="`popover-${scope.$index}`"
trigger="click"
>
</el-popover>
popoverClose(scope) {
this.$refs[`popover-${scope.$index}`].doClose()
}