在vue中封裝可復用的組件方法
本次封裝的組件以toast組件為例
以前使用移動端ui插件時,通過一句代碼比如 $.toast( ‘ 需要顯示的內容 ' ),從而在頁面上展示這段文字,并在一定時間后消失。
現(xiàn)在我們也嘗試自己封裝toast組件。
準備工作:vue-cli腳手架工程
先看一下涉及到的文件目錄截圖:

這次的封裝主要涉及的文件是Toast.vue toast.js Hello.vue,主要思路如下:
① Toast.vue是我們要使用的toast組件;
② toast.js里面用Vue.extend()擴展一個組件構造器,然后通過實例化組件構造器,就可創(chuàng)造出可復用的組件。
最后在toast.js里面導出函數(shù)myToast,函數(shù)myToast里面的邏輯在代碼里面有解釋;
③ Hello.vue里調用函數(shù),顯示組件。
Toast.vue代碼:
<template>
<div class="toast" v-if="isShow">
<div class="toast-div">{{ text }}</div>
</div>
</template>
<script>
export default{
data(){
return {
text:'內容',
isShow:true,
duration:1500
}
}
}
</script>
<style>
*{
margin: 0;
padding: 0;
}
.toast{
position: fixed;
left: 50%;
transform: translate(-50%, 0);
margin-top: 5rem;
background: #000000;
line-height: 0.7rem;
color: #FFFFFF;
padding: 0 0.2rem;
border-radius: 0.2rem;
}
</style>
Toast.js代碼:
import Vue from 'vue';
import Toast from '@/components/Toast'; //引入組件
let ToastConstructor = Vue.extend(Toast) // 返回一個“擴展實例構造器”
let myToast = ()=>{
let toastDom = new ToastConstructor({
el:document.createElement('div') //將toast組件掛載到新創(chuàng)建的div上
})
document.body.appendChild( toastDom.$el ) //把toast組件的dom添加到body里
}
export default myToast;
Hello.vue代碼:
<template>
<div class="hello">
<button @click="showToast">按鈕</button>
</div>
</template>
<script>
import Vue from 'vue';
import toast from './js/toast'; //引入toast函數(shù)
Vue.prototype.$toast = toast; //給Vue對象添加$toast方法
export default {
name: 'hello',
data () {
return {
}
},
methods:{
showToast(){
this.$toast(); //現(xiàn)在就可以調用了
}
}
}
</script>
通過以上步驟,離真正的toast效果還是有區(qū)別的,我們要達到的效果是讓顯示的內容在一段時間后消失,那么,得從toast.js里面修改,得重新寫myToast函數(shù),給他設置兩個傳入參數(shù),一個是顯示的內容,一個是顯示的時間。
toast.js修改后的代碼如下:
import Vue from 'vue';
import Toast from '@/components/Toast'; //引入組件
let ToastConstructor = Vue.extend(Toast) // 返回一個“擴展實例構造器”
let myToast = (text,duration)=>{
let toastDom = new ToastConstructor({
el:document.createElement('div') //將toast組件掛載到新創(chuàng)建的div上
})
document.body.appendChild( toastDom.$el ) //把toast組件的dom添加到body里
toastDom.text = text;
toastDom.duration = duration;
// 在指定 duration 之后讓 toast消失
setTimeout(()=>{
toastDom.isShow = false;
}, toastDom.duration);
}
export default myToast;
那么,現(xiàn)在我們在Hello.vue中調用的時候就應該是這樣了:this.$toast('新內容',2000);我們的組toast組件可以正常使用了!
以上這篇在vue中封裝可復用的組件方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
如何用vue3+Element?plus實現(xiàn)一個完整登錄功能
要實現(xiàn)用戶的登錄功能,可以使用Vue3和Element?Plus,下面這篇文章主要給大家介紹了關于如何基于Vue3和Element?Plus組件庫實現(xiàn)一個完整的登錄功能,文中提供了詳細的代碼示例,需要的朋友可以參考下2023-10-10
Vue 子組件使用 this.$parent 無法訪問到父組件數(shù)據和方法(解決思路)
這篇文章主要介紹了Vue 子組件使用 this.$parent 無法訪問到父組件數(shù)據和方法,解決思路也很簡單,本文結合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-07-07

