欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Vue3封裝一個彈框組件簡單嗎

 更新時間:2021年12月09日 10:49:12   作者:江湖不渡i  
最近在項目中自己封裝的一個記錄一下,下面這篇文章主要給大家介紹了關于利用Vue3封裝一個彈框組件的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

總結(jié)放前面:

Tipes: 封裝彈框組件使用了Teleport,避免了組件嵌套可能導致的定位層級的隱患,還使用了defineProps,defineEmits,插槽增加了組件的拓展性。

???? 前言:

之前一直沒有自己去封裝過一個彈框組件,但是覺得一個小小的彈窗組件那不是灑灑水小意思了。然后今天新項目中需要一個彈窗組件,所以我就做了一個。不做不要緊一做發(fā)現(xiàn)還是有很多不同的小問題,然后就把遇到的問題和大佬們分享一下。

開始先回顧一下需求,一個全局使用的公共彈框組件。那么就有幾個要點:公共、全局、彈框,下面我們就針對這幾個要點去一點點實現(xiàn)彈框組件。

????公共????

公共這個簡單,相信在座的各位大佬肯定都是手拿把掐,輕輕松松就實現(xiàn)了。

先實現(xiàn)一個主體內(nèi)容,我的方法就是使用插槽和參數(shù)傳遞。例子只是簡單的傳遞兩個參數(shù),一個標題內(nèi)容一個控制打開和關閉的布爾值。主要涉及到Vue3兩個Api的使用defineProps,defineEmits還有插槽的使用。

<template>
    <Mask @click="close" /> // 蒙板層
    <div class="modal_all" v-if="visible">
        <slot name="header"> // 方便頁面增加定制頭部
            <div class="modal_header">
                <p class="modal_header_title">{{ title }}</p>
                <p class="modal_header_img" @click="close"></p>
            </div>
        </slot>
        <div class="modal_content">
            <slot></slot> // 開放彈框內(nèi)容使用
        </div>
    </div>
</template>
<script lang="ts" setup>
defineProps({
    visible: {
        type: Boolean,
        default: false,
    },
    title: {
        type: String,
    },
});
const emit = defineEmits(['update:visible']);
const close = () => {
    emit('update:visible', false);
};
</script>
// 樣式省略

????全局????

基本布局差不多了,下面就是全局注冊,目的是為了不用每次使用每次都要引入。

vue2在注冊全局組件的時候,直接Vue.component('名稱', 組件)就可以了,那么在vue3中怎么批量注冊全局組件吶?提供一個install方法,使用app.use()自動調(diào)用。

import Modal from './Modal/Modal.vue';
import Mask from './Modal/Mask.vue';

// 在script setup不能寫name,所以在這里加一個
const coms = [
  {
    name: 'Modal', // 使用組件的名稱
    compent: Modal,
  },
  {
    name: 'Mask',
    compent: Mask,
  },
];

export default {
  install: (app) => {
    coms.forEach((item) => {
      app.component(item.name, item.compent);
    });
  },
};

// main.ts
import Common from './common/index';
const app = createApp(App);
app.use(Common);

????彈框????

其實彈框組件寫到這里已經(jīng)差不多了,那為什么要把彈框這個單獨列出來說一下吶?

相信各位大佬在日常工作中也遇到過定位和層級的問題,如果我們把需要定位的組件嵌套在 Vue 的某個組件內(nèi)部,因為css各種層的原因我們在處理嵌套的定位、層級 和樣式就會變得很困難,一不小心就會出現(xiàn)一些奇奇怪怪的問題,那么怎么去避免這個問題?下面就要使用到Vue3中另外一個傳送門Api:Teleport。

Tipes: Teleport就是將我們的組件掛載到屬性 to 對應的DOM元素中,類似一個任意門。

先上代碼:

<teleport to="#mask_modal" v-if="visible">
    <div class="modal_cent">
        <Mask @click="close" />
            <div class="modal_all">
                <slot name="header">
                    <div class="header">
                        <p class="header_title">{{ title }}</p>
                        <p class="header_img" @click="close"></p>
                    </div>
                </slot>
            <div>
            <slot></slot>
            </div>
        </div>
    </div>
</teleport>

我們來看一下這樣寫之后的層級:

通過 to 屬性,指定彈框組件渲染的位置與layput組件同級,但是 teleport 的狀態(tài) visible 又是完全由我們調(diào)用的組件控制,就避免了我們在嵌套組件的時候定位層級樣式的問題。

???? 至此,一個簡單的公共彈框組件已經(jīng)寫的差不多了。然后在寫這個組件的過程中我還是遇到了幾個不算問題的問題??。

??????1.script setup中沒法寫name屬性:

如果沒有用ts的話,可以再寫一個script標簽,在里面導出然后寫name。如果使用ts,那么這個方法就行不通就會報錯。那么就利用我上面寫的方法,自己重新定義一下寫一個對象那樣。

??????2.直接給全局組件加一個class加樣式不生效:

其實我們正常寫公共組件,在使用的地方想直接在外層控制內(nèi)部容器的樣式,我們可以直接在外面加一個類名去增加樣式,但是我在寫這個彈框組件的時候卻一直不生效,找了半天后來才發(fā)現(xiàn)原來是因為我使用了teleport,所以在解析的時候class不能被繼承。同樣要是組件內(nèi)沒有一個根組件同樣會出現(xiàn)這樣的問題。這樣其實也沒關系,我們在插槽內(nèi)寫內(nèi)容自動撐開就可以了,相信各位大佬肯定不會像我一樣搞這么傻的操作,哈哈。

??????結(jié)語:

其實一個彈框組件的封裝還是很簡單的,不過也算是積累了一點經(jīng)驗,把自己的項目實施落地。后面去封裝更加復雜的組件也會比較有思路。

到此這篇關于利用Vue3封裝一個彈框組件的文章就介紹到這了,更多相關Vue3封裝彈框組件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue富文本插件(quill-editor)的使用及說明

    Vue富文本插件(quill-editor)的使用及說明

    這篇文章主要介紹了Vue富文本插件(quill-editor)的使用及說明,具有很好的參考價值,希望對大家有所幫助。
    2023-02-02
  • 一步一步實現(xiàn)Vue的響應式(對象觀測)

    一步一步實現(xiàn)Vue的響應式(對象觀測)

    這篇文章主要介紹了一步一步實現(xiàn)Vue的響應式(對象觀測),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • vue-content-loader內(nèi)容加載器的使用方法

    vue-content-loader內(nèi)容加載器的使用方法

    這篇文章主要介紹了vue-content-loader內(nèi)容加載器的使用方法,本文分步驟給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • vue 使用 vue-pdf 實現(xiàn)pdf在線預覽的示例代碼

    vue 使用 vue-pdf 實現(xiàn)pdf在線預覽的示例代碼

    這篇文章主要介紹了vue 使用 vue-pdf 實現(xiàn)pdf在線預覽的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • vue-cli3項目打包后自動化部署到服務器的方法

    vue-cli3項目打包后自動化部署到服務器的方法

    這篇文章主要介紹了vue-cli3項目打包后自動化部署到服務器的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Vue實現(xiàn)開心消消樂游戲算法

    Vue實現(xiàn)開心消消樂游戲算法

    這篇文章主要介紹了使用Vue寫一個開心消消樂游戲,游戲算法在文中給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • vuex頁面刷新數(shù)據(jù)丟失問題的四種解決方式

    vuex頁面刷新數(shù)據(jù)丟失問題的四種解決方式

    vuex是大家使用vue時大多數(shù)都會選擇的,但是當頁面刷新之后vuex數(shù)據(jù)會丟失,下面這篇文章主要給大家介紹了關于vuex頁面刷新數(shù)據(jù)丟失問題的四種解決方式,需要的朋友可以參考下
    2022-02-02
  • 一文詳解Vue中可重用組件的3個主要問題

    一文詳解Vue中可重用組件的3個主要問題

    當我們談論或討論在?Vue?中創(chuàng)建用戶界面組件時,經(jīng)常會提到可重用性,在?Vue?中創(chuàng)建真正的可重用組件可能很棘手,在本文中,我將探討可重用組件的概念、應用這些組件時面臨的問題,以及為什么必須盡可能克服這些問題,需要的朋友可以參考下
    2023-10-10
  • vue-cli4.x創(chuàng)建企業(yè)級項目的方法步驟

    vue-cli4.x創(chuàng)建企業(yè)級項目的方法步驟

    這篇文章主要介紹了vue-cli4.x創(chuàng)建企業(yè)級項目的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • vue 中this.$set 動態(tài)綁定數(shù)據(jù)的案例講解

    vue 中this.$set 動態(tài)綁定數(shù)據(jù)的案例講解

    這篇文章主要介紹了vue 中this.$set 動態(tài)綁定數(shù)據(jù)的案例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論