最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue自定義組件如何通過(guò)v-model指令控制組件的隱藏、顯示

 更新時(shí)間:2022年05月31日 14:50:17   作者:夢(mèng)一場(chǎng)江南煙雨  
這篇文章主要介紹了vue自定義組件如何通過(guò)v-model指令控制組件的隱藏、顯示,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

通過(guò)v-model指令控制組件的隱藏、顯示

在開(kāi)發(fā)項(xiàng)目的過(guò)程中,我們通常會(huì)有自定義組件的時(shí)候,那么在自定義組件后,我們?nèi)绾稳?duì)組件進(jìn)行類似于常用的UI組件庫(kù)里面那些通過(guò)v-model來(lái)展示、隱藏組件的功能效果呢?好吧~接下來(lái)我直接上代碼

1.新建一個(gè)叫child.vue的vue組件文件

內(nèi)容如下:

<!--child.vue-->
<template>
    <div class="tips_wrap" v-if="showChild">
		我是自定義組件child
    </div>
</template>
<script>
export default {
    model: {
        prop: 'showChild'
    },
    props: {
        showChild: {
            type: Boolean,
            default: true
        }
    },
    methods: {
        closeChild() {
            this.$parent.showChild= !this.$parent.showChild
            // 或者可以這樣寫,子組件用input事件傳遞值,父組件直接用v-model里面的屬性進(jìn)行接收
            this.$emit('input', false)
        }
    }
}
</script>

2.將這個(gè)組件注冊(cè)在全局

方便直接使用,也可以不注冊(cè),在main.js文件里面引入并注冊(cè):

// 引入自定義組件
import Child from '@/components/Child'
// 注冊(cè)自定義組件
Vue.component('Child', Child)

3.在父組件文件里面寫入Child組件

并加上v-model="showChild":

<template>
?? ?<Child v-model="showChild"></Child>
</template>
<script>
export default {
? ? data() {
? ? ?? ?return {
?? ??? ??? ?showChild: true
?? ??? ?}
? ? }
}
</script>

好了,到此實(shí)現(xiàn)自定義組件通過(guò)v-model指令控制組件的隱藏、顯示 

在組件中實(shí)現(xiàn)v-model

v-model本質(zhì)是語(yǔ)法糖,它負(fù)責(zé)監(jiān)聽(tīng)用戶的輸入事件以更新數(shù)據(jù),并對(duì)一些極端場(chǎng)景進(jìn)行一些特殊處理。

1.v-model使用的屬性和事件

v-model在內(nèi)部為不同的輸入元素使用不同的屬性并拋出不同的事件

  • input輸入框(type為text)、textarea元素使用value屬性和input事件
  • checkbox、radio使用checked屬性和change事件
  • select下拉框使用value屬性和change事件

2.自定義組件中輸入框的v-model

在父組件中使用自定義組件myInput,使用v-model傳入數(shù)據(jù)

<myInput v-model="name" />

以上寫法相當(dāng)于如下

<my-input :value="msg" @input="(e)=>{msg=e}"/>

v-model是value屬性和input事件的語(yǔ)法糖

1、第一種寫法

在組件的props中,通過(guò)value接收父組件v-model傳過(guò)來(lái)的數(shù)據(jù)。

在輸入時(shí),通過(guò)$emit觸發(fā)input事件,并將當(dāng)前的輸入值傳過(guò)去,就會(huì)在父組件上觸發(fā)input事件,并將傳來(lái)的值賦給父組件上的值

<template>
? <div class="myInput">
? ? <input
? ? ? type="text"
? ? ? :value="value"
? ? ? @input="$emit('input', $event.target.value)"
? ? />
? </div>
</template>
<script>
export default {
? props: {
? ? value:{}
? },
};
</script>

2、第二種寫法

一般以第一種寫法就可以達(dá)到目的了。

一個(gè)組件上的 v-model 默認(rèn)會(huì)利用名為 value 的 prop 和名為 input 的事件,但是像單選框、復(fù)選框等類型的輸入控件可能會(huì)將 value attribute 用于不同的目的。使用model可以改變接收的屬性名和拋出的事件名,model 選項(xiàng)可以用來(lái)避免這樣的沖突

以input(type為text)標(biāo)簽的v-model為例,使用model后:

model: {
? ? prop: "xxxxx",
? ? event: "yyyyy",
? },
  • 就將原來(lái)要接收的value屬性改為了xxxxx屬性,
  • 原來(lái)要拋出的input事件,改為了yyyyy事件
  • 所以,在props中接收xxxxx屬性
  • 觸發(fā)事件時(shí),觸發(fā)yyyyy事件
<myInput v-model="name" />

此時(shí)就相當(dāng)于如下代碼

<my-input :xxxxx="msg" @yyyyy="(e)=>{msg=e}"/>
<template>
? <div class="myInput">
? ? <input
? ? ? type="text"
? ? ? :value="xxxxx"
? ? ? @input="$emit('yyyyy', $event.target.value)"
? ? />
? </div>
</template>
<script>
export default {
? model: {
? ? prop: "xxxxx",
? ? event: "yyyyy",
? },
? props: {
? ? xxxxx: String,
? },
};
</script>

一個(gè)組件中只能寫一個(gè)輸入框,因?yàn)関-model只能綁定一個(gè)數(shù)據(jù);

如果想寫一個(gè)組件,在組件內(nèi)有多個(gè)輸入框,就只能傳一個(gè)對(duì)象給子組件了。

3.通過(guò)v-model控制組件的顯示

在一些組件庫(kù)中,一些組件例如dialog組件,可以通過(guò)v-model來(lái)控制dialog的顯示與隱藏,這是怎么實(shí)現(xiàn)的?

isShow控制組件box的顯示與否

<box v-model="isShow"/>

在box組件中,

  • 通過(guò)props的value接收v-model傳過(guò)來(lái)的值;
  • 定義一個(gè)變量showModal,并將value的值同步賦值給它;
  • 使用showModal控制組件的顯示隱藏;
  • 點(diǎn)擊box組件時(shí),將showModal設(shè)為false,同時(shí)觸發(fā)input事件,并將當(dāng)前的showModal值傳過(guò)去;
  • 父組件響應(yīng)input事件,將v-model綁定的值賦值;
  • div元素使用的是value屬性和input事件(div元素可以變成輸入框,它上面存在input事件)
<template>
? <div class="box" @click="hide" v-show="showModal"></div>
</template>
<script>
export default {
? props: {
? ? value: {
? ? ? type: Boolean,
? ? },
? },
? data() {
? ? return {
? ? ? showModal: false,
? ? };
? },
? watch: {
? ? value(val) {
? ? ? this.showModal = val;
? ? },
? ? showModal(val) {
? ? ? this.$emit("input", val);
? ? },
? },
? methods: {
? ? hide() {
? ? ? this.showModal = false;
? ? },
? },
};
</script>

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue項(xiàng)目打包后部署到服務(wù)器的詳細(xì)步驟

    vue項(xiàng)目打包后部署到服務(wù)器的詳細(xì)步驟

    這篇文章主要介紹了vue項(xiàng)目打包后部署到服務(wù)器,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • Vue標(biāo)簽屬性動(dòng)態(tài)傳參并拼接字符串的操作方法

    Vue標(biāo)簽屬性動(dòng)態(tài)傳參并拼接字符串的操作方法

    這篇文章主要介紹了Vue標(biāo)簽屬性動(dòng)態(tài)傳參并拼接字符串的操作方法,我們需要根據(jù)傳入值的類型,在placeholder屬性賦值"請(qǐng)輸入長(zhǎng)度",“請(qǐng)輸入寬度”,"請(qǐng)輸入厚度"等提示字符,本文通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友參考下吧
    2023-11-11
  • vue單個(gè)組件實(shí)現(xiàn)無(wú)限層級(jí)多選菜單功能

    vue單個(gè)組件實(shí)現(xiàn)無(wú)限層級(jí)多選菜單功能

    這篇文章主要介紹了vue單個(gè)組件實(shí)現(xiàn)無(wú)限層級(jí)多選菜單的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-04-04
  • vue-element-admin 全局loading加載等待

    vue-element-admin 全局loading加載等待

    本文主要介紹了vue-element-admin 全局loading加載等待,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Vue3中導(dǎo)入和使用圖標(biāo)庫(kù)Font Awesome的實(shí)現(xiàn)步驟

    Vue3中導(dǎo)入和使用圖標(biāo)庫(kù)Font Awesome的實(shí)現(xiàn)步驟

    Font Awesome 是互聯(lián)網(wǎng)的圖標(biāo)庫(kù)和工具包,被數(shù)百萬(wàn)設(shè)計(jì)師、開(kāi)發(fā)人員和內(nèi)容創(chuàng)建者使用,Font Awesome的圖標(biāo)非常豐富,基本涵蓋你所需要的所有,本文給大家介紹了Vue3中導(dǎo)入和使用圖標(biāo)庫(kù)Font Awesome的具體步驟,需要的朋友可以參考下
    2025-01-01
  • 有關(guān)vue 組件切換,動(dòng)態(tài)組件,組件緩存

    有關(guān)vue 組件切換,動(dòng)態(tài)組件,組件緩存

    這篇文章主要介紹了有關(guān)vue 組件切換,動(dòng)態(tài)組件,組件緩存,在組件化開(kāi)發(fā)模式下,我們會(huì)把整個(gè)項(xiàng)目拆分成很多組件,然后按照合理的方式組織起來(lái),達(dá)到預(yù)期效果,下面來(lái)看看文章的詳細(xì)內(nèi)容
    2021-11-11
  • 詳解如何解決Vue和vue-template-compiler版本之間的問(wèn)題

    詳解如何解決Vue和vue-template-compiler版本之間的問(wèn)題

    這篇文章主要介紹了詳解如何解決Vue和vue-template-compiler版本之間的問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • vue3中關(guān)于路由hash與History的設(shè)置

    vue3中關(guān)于路由hash與History的設(shè)置

    這篇文章主要介紹了vue3中關(guān)于路由hash與History的設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue-json-editor json編輯器的使用

    vue-json-editor json編輯器的使用

    本文主要介紹了vue-json-editor json編輯器的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Vue高級(jí)組件之函數(shù)式組件的使用場(chǎng)景與源碼分析

    Vue高級(jí)組件之函數(shù)式組件的使用場(chǎng)景與源碼分析

    Vue提供了一種稱為函數(shù)式組件的組件類型,用來(lái)定義那些沒(méi)有響應(yīng)數(shù)據(jù),也不需要有任何生命周期的場(chǎng)景,它只接受一些props來(lái)顯示組件,下面這篇文章主要給大家介紹了關(guān)于Vue高級(jí)組件之函數(shù)式組件的使用場(chǎng)景與源碼分析的相關(guān)資料,需要的朋友可以參考下
    2021-11-11

最新評(píng)論

米林县| 望谟县| 黄浦区| 天台县| 休宁县| 砚山县| 胶州市| 河北区| 全州县| 雅安市| 永和县| 台安县| 扬州市| 通化市| 芦溪县| 连江县| 侯马市| 宁晋县| 台南市| 长治县| 阿合奇县| 额敏县| 河北省| 海淀区| 崇左市| 永丰县| 贵南县| 天气| 米脂县| 临西县| 革吉县| 万盛区| 当涂县| 桐梓县| 大港区| 丹阳市| 松滋市| 象州县| 遵义县| 华亭县| 杨浦区|