vue自定義實例化modal彈窗功能的實現(xiàn)
需求背景
使用iview時發(fā)現(xiàn)其定義的this.$Modal.confirm()
不能進行樣式修改,并且秉承著對新知識的追求,故此有了以下的開發(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)
下面進行相關(guān)講解
1. 寫一個相關(guān)的vue組件:index.vue
這里vue組件根據(jù)自己所需進行書寫,我這里就不進行相關(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)
進行使用
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)文章
vue3實戰(zhàn)-axios請求封裝問題(get、post、put、delete)
這篇文章主要介紹了vue3實戰(zhàn)-axios請求封裝問題(get、post、put、delete),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03Element-UI結(jié)合遞歸組件實現(xiàn)后臺管理系統(tǒng)左側(cè)菜單
在Vue.js中使用遞歸組件可以方便地構(gòu)建多層級的菜單結(jié)構(gòu),遞歸組件適用于處理具有嵌套關(guān)系的數(shù)據(jù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-09-09vue-video-player實現(xiàn)實時視頻播放方式(監(jiān)控設(shè)備-rtmp流)
這篇文章主要介紹了vue-video-player實現(xiàn)實時視頻播放方式(監(jiān)控設(shè)備-rtmp流),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08基于iview-admin實現(xiàn)動態(tài)路由的示例代碼
這篇文章主要介紹了基于iview-admin實現(xiàn)動態(tài)路由的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10element-UI el-table修改input值視圖不更新問題
這篇文章主要介紹了element-UI el-table修改input值視圖不更新問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02