vue使用Vue.extend方法仿寫(xiě)個(gè)loading加載中效果實(shí)例
需求描述
本文我們使用vue的extend方法實(shí)現(xiàn)一個(gè)全屏loading加載效果
- 通過(guò)命令就可以讓彈框開(kāi)啟或關(guān)閉,比如
this.$showDialog()
開(kāi)啟,this.$hideDialog()
關(guān)閉 - 方法可以傳參更改loading中的文字
- 也可以傳參更改loading背景色
當(dāng)然這里除了文字,背景色什么的,也可以傳遞更多的參數(shù),具體可以根據(jù)業(yè)務(wù)場(chǎng)景設(shè)計(jì),為了便于理解文章這里就不贅述了。
我們先看一下效果圖:
效果圖
代碼實(shí)現(xiàn)
第一步,新建loading組件
比如我們?cè)趕rc目錄下,新建loading文件夾用于存放loading相關(guān)文件,在這個(gè)文件夾下新建的loading.vue文件是用來(lái)做彈出框的組件
src/loading/loading.vue
<template> <!-- 打開(kāi)彈框的動(dòng)畫(huà) --> <transition name="animation"> <div class="loadindWrap" v-if="showLoading" :style="{ background: backgroundColor }" > <div class="loadingContent"> <div class="iBox"> <i class="el-icon-loading"></i> </div> <div class="text">{{ text }}</div> </div> </div> </transition> </template> <script> export default { data() { return { showLoading: false, // 控制顯示與隱藏的標(biāo)識(shí) backgroundColor: "rgba(0, 0, 0, 0.5)", // 默認(rèn)背景色 text: "加載中...", // 默認(rèn)文字 }; }, }; </script> <style lang="less" scoped> .loadindWrap { position: absolute; top: 0; left: 0; width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; .loadingContent { color: rgb(160, 233, 66); text-align: center; .iBox { margin-bottom: 6px; i { font-size: 20px; color: #bfa; } } } } // 加一個(gè)過(guò)渡效果 .animation-enter, .animation-leave-to { opacity: 0;} .animation-enter-active, .animation-leave-active { transition: opacity 0.6s; } </style>
第二步,新建index.js文件
比如我們?cè)趕rc目錄下,新建的loading文件夾中再新建一個(gè)index.js文件用來(lái)書(shū)寫(xiě)相應(yīng)js代碼,用于控制loading彈框。
src/loading/index.js
// 引入vue import Vue from 'vue' // 引入loading組件 import dialog from './loading'; // 通過(guò)Vue的extend方法繼承這個(gè)引入的dialog組件,繼承后會(huì)返回一個(gè)vue子類(lèi),需要使用實(shí)例化即可 const Dialog = Vue.extend(dialog); //創(chuàng)建實(shí)例并且掛載到一個(gè)div上 const app = new Dialog().$mount(document.createElement('div')) // 打開(kāi)彈框函數(shù) function showDialog(options) { //初始化調(diào)用傳遞過(guò)來(lái)的參數(shù)賦值更改組件內(nèi)內(nèi)部值 for (let key in options) { app[key] = options[key]; } // 讓其顯示 app.showLoading = true // 并將其插入body中 document.body.appendChild(app.$el); } // 關(guān)閉彈框函數(shù) function hideDialog() { // 因?yàn)槭莢-if去控制,所以將標(biāo)識(shí)showLoading置為false,就會(huì)自動(dòng)把彈框dom刪掉 app.showLoading = false } // 將打開(kāi)函數(shù)和關(guān)閉函數(shù)都掛載到Vue原型上,方便我們調(diào)用 Vue.prototype.$showDialog = showDialog; Vue.prototype.$hideDialog = hideDialog;
第三步,在main.js中引入之
main.js
// ... // 最后要在main.js中引入,表示使用之,這樣在任意組件中都可以執(zhí)行對(duì)應(yīng)方法了 import './loading/index.js' new Vue({ render: h => h(App), router, store // 掛載上去 }).$mount('#app')
第四步,命令式調(diào)用
<template> <div class="aBox"> <el-button @click="show">點(diǎn)擊出現(xiàn)加載中彈框</el-button> </div> </template> <script> export default { methods: { // 通過(guò)指令的方式即可調(diào)用,很方便 show() { this.$showDialog({ text: "瀏覽器在加載中哇...", }); // 模擬發(fā)請(qǐng)求,過(guò)了1.5秒鐘再將其關(guān)閉 setTimeout(() => { this.$hideDialog(); }, 1500); }, }, }; </script>
Vue.extend方法的理解
我們知道,無(wú)論哪種程序語(yǔ)言,或多或少都會(huì)有封裝、繼承、多態(tài)的思想,而Vue.extend方法就是Vue的一個(gè)用于繼承組件的方法。官方是這樣定義的:使用基礎(chǔ) Vue 構(gòu)造器,創(chuàng)建一個(gè)“子類(lèi)”。參數(shù)是一個(gè)包含組件選項(xiàng)的對(duì)象。
構(gòu)造器也可以理解為是一個(gè)類(lèi),既然是一個(gè)類(lèi),就可以去實(shí)例化對(duì)象,extend方法可以實(shí)例一個(gè)組件對(duì)象,而這個(gè)組件對(duì)象擁有我們最初定義的loading.vue所有屬性和方法。所以我們將這個(gè)組件對(duì)象掛載到一個(gè)div上,讓其有一個(gè)著落,即成為dom元素。
最終,當(dāng)我們需要彈框出現(xiàn)的時(shí)候,把這個(gè)dom元素插入到文檔對(duì)象上,不需要的時(shí)候,再將其刪除掉。這樣就實(shí)現(xiàn)了,打開(kāi)和關(guān)閉彈框的效果。
總結(jié)
到此這篇關(guān)于vue使用Vue.extend方法仿寫(xiě)個(gè)loading加載中效果實(shí)例的文章就介紹到這了,更多相關(guān)vue Vue.extend仿loading加載中內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vue實(shí)現(xiàn)吸頂、錨點(diǎn)和滾動(dòng)高亮按鈕效果
這篇文章主要介紹了vue實(shí)現(xiàn)一個(gè)簡(jiǎn)單的吸頂、錨點(diǎn)和滾動(dòng)高亮按鈕效果,需要的朋友可以參考下2019-10-10Vite配置優(yōu)雅的code?spliiting代碼分割詳解
這篇文章主要為大家介紹了Vite配置優(yōu)雅的code?spliiting代碼分割詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08vue新建項(xiàng)目并配置標(biāo)準(zhǔn)路由過(guò)程解析
這篇文章主要介紹了vue新建項(xiàng)目并配置標(biāo)準(zhǔn)路由過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12詳解vuejs2.0 select 動(dòng)態(tài)綁定下拉框支持多選
這篇文章主要介紹了vuejs2.0 select動(dòng)態(tài)綁定下拉框 ,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04vue 跳轉(zhuǎn)到其他頁(yè)面并關(guān)閉當(dāng)前頁(yè)面的實(shí)現(xiàn)代碼
我在做一個(gè)調(diào)用虛擬機(jī)錄屏的一個(gè)操作,需要在瀏覽器頁(yè)面上,點(diǎn)擊按鈕后,關(guān)閉當(dāng)前頁(yè)面里的某一個(gè)頁(yè)面,并且打開(kāi)瀏覽器新頁(yè)面是虛擬機(jī)的頁(yè)面,本文給大家介紹vue 跳轉(zhuǎn)到其他頁(yè)面并關(guān)閉當(dāng)前頁(yè)面的實(shí)現(xiàn)代碼,感興趣的朋友一起看看吧2023-09-09vue+webpack dev本地調(diào)試全局樣式引用失效的解決方案
今天小編就為大家分享一篇vue+webpack dev本地調(diào)試全局樣式引用失效的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-11-11Vue常用傳值方式、父?jìng)髯?、子傳父及非父子?shí)例分析
這篇文章主要介紹了Vue常用傳值方式、父?jìng)髯印⒆觽鞲讣胺歉缸?結(jié)合實(shí)例形式分析了vue.js常見(jiàn)的傳值方式及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2020-02-02VueCLI通過(guò)process.env配置環(huán)境變量的實(shí)現(xiàn)
本文主要介紹了VueCLI通過(guò)process.env配置環(huán)境變量的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07