vue自定義實例化modal彈窗功能的實現(xiàn)
需求背景
使用iview時發(fā)現(xiàn)其定義的this.$Modal.confirm()不能進(jìn)行樣式修改,并且秉承著對新知識的追求,故此有了以下的開發(fā)
按照我的文檔習(xí)慣:優(yōu)先上代碼
// components/confirmModal/index.vue
<template>
<Modal v-model="modal" :title="title">
<div>{{content}}</div>
<div slot="footer">
<Button class="btn-primary" @click="onSubmit" :loading="loading">sure</Button>
<Button class="btn-cancel" @click="cancel">cancel</Button>
</div>
</Modal>
</template>
<script>
export default {
name: 'confirm-modal',
data() {
return {
modal: false,
loading: false,
title: '',
content: '',
subFunc: null,
cancelFunc: null
}
},
methods: {
show(data) {
const { title, content, subFunc, cancelFunc } = data
this.modal = true
this.title = title
this.content = content
this.subFunc = subFunc
this.cancelFunc = cancelFunc
},
onSubmit() {
this.subFunc.call()
},
cancel() {
this.modal = false
}
}
}
</script>
// components/confirmModal/index.js
import Vue from 'vue'
import ConfirmModal from './index.vue'
const Modal = Vue.extend(ConfirmModal)
let instance1
let instance = new Modal()
instance.confirm = function (data) {
instance1 = new Modal({
data
}).$mount()
document.body.appendChild(instance1.$el)
if (data) {
instance1.show(data)
}
return instance1
}
instance.remove = function () {
instance1.cancel()
}
export default {
install: Vue => {
Vue.prototype.$ConfirmModal = instance // 將ConfirmModal 組件暴露出去,并掛載在Vue的prototype上
}
}
// main.js import Vue from "vue"; import ConfirmModal from './components/shared/confirmModal/index.js' Vue.use(ConfirmModal)
下面進(jìn)行相關(guān)講解
1. 寫一個相關(guān)的vue組件:index.vue
這里vue組件根據(jù)自己所需進(jìn)行書寫,我這里就不進(jìn)行相關(guān)講解了;
2. 通過js文件將vue文件暴露出去
創(chuàng)建confirmModal實例,并掛載到一個dom實例上。
const Modal = Vue.extend(ConfirmModal)
Vue.extend 屬于Vue的全局 api,在實際業(yè)務(wù)開發(fā)中我們很少使用,因為相比常用的 Vue.component寫法使用 extend 步驟要更加繁瑣一些。但是在一些獨立組件開發(fā)場景中(例如:ElementUI庫),所以Vue.extend + $mount這對組合非常有必要需要我們了解下。


再new一個instance對象,其中包含多個你所需要調(diào)用的方法,我這里定義了兩個,分別是confirm、 remove且在最初時需要將你掛載的instance1存起來,避免在其他function中需要使用
最后export default instance即可
3. 需要在main.js中使用Vue.use(ConfirmModal)進(jìn)行使用
import Vue from "vue"; import ConfirmModal from './components/shared/confirmModal/index.js' Vue.use(ConfirmModal)
4. 用法
在任何vue中直接使用即可
this.$ConfirmModal.confirm({
title: '123',
content: '12111',
subFunc: () => {
console.log('1111')
console.log(this.$ConfirmModal)
this.$ConfirmModal.remove()
}
})
到此這篇關(guān)于vue自定義實例化modal彈窗的文章就介紹到這了,更多相關(guān)vue自定義modal彈窗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解element上傳組件before-remove鉤子問題解決
這篇文章主要介紹了詳解element上傳組件before-remove鉤子問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04
vue-router 中router-view不能渲染的解決方法
本篇文章主要結(jié)合了vue-router 中router-view不能渲染的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
vue+vuecli+webpack中使用mockjs模擬后端數(shù)據(jù)的示例
本篇文章主要介紹了vue+vuecli+webpack中使用mockjs模擬后端數(shù)據(jù)的示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-10-10
vue頁面監(jiān)聽是否置為后臺或可見狀態(tài)問題
這篇文章主要介紹了vue頁面監(jiān)聽是否置為后臺或可見狀態(tài)問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10

