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

vue2中如何自定義組件的v-model

 更新時間:2022年08月02日 09:48:23   作者:風(fēng)如也  
這篇文章主要介紹了vue2中如何自定義組件的v-model,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

如何自定義組件的v-model

工作中經(jīng)常會涉及到父子組件數(shù)據(jù)更新和頁面相應(yīng)數(shù)據(jù)樣式改變的問題。

通俗點來說,就是涉及到公共組件的可以抽離出來作為子組件,如果父組件中與子組件相關(guān)的數(shù)據(jù)改變,子組件中的數(shù)據(jù)也會改變,如果子組件的數(shù)據(jù)改變,則需要做一定的處理才能改變父組件中的相關(guān)數(shù)據(jù)。

處理方式:考慮使用 自定義組件的v-model(vue2 中方式)

父組件

<search-tab :list="list" v-model="active" />
...
export default {
?? ?data(){
?? ??? ?return {
?? ??? ??? ?list: [],
?? ??? ??? ?active: 0
?? ??? ?}
?? ?}
}
...

子組件 SearchTab

<el-tabs :value="active" @tab-click="handleClick">
? <el-tab-pane v-for="(item, key) in list" :key="key" :label="item.name" :name="item.value"></el-tab-pane>
</el-tabs>
...
export default {
? name: 'SearchTab',
? props: {
? ? active: {
? ? ? type: Number,
? ? ? default: 0
? ? },
? ? list: Array
? },
? model: {
? ? prop: 'active',
? ? event: 'changeActive'
? },
? methods: {
? ? handleClick(val) {
? ? ? this.$emit('changeActive', val.name)
? ? }
? }
}
...

這種方式如果涉及到選中組件的選中樣式問題,能夠響應(yīng)式

而如果我們不用自定義組件的 v-model 方法,而是普通的父子組件通信,子組件改變父組件的值通過子組件中聲明的另一個來作為中間變量,監(jiān)聽中間變量的值來改變父組件中的值,這種方式雖然能改變值,但是選中樣式卻不能及時更新。

子組件示例

<el-tabs :value="active" @tab-click="handleClick">
? <el-tab-pane v-for="(item, key) in list" :key="key" :label="item.name" :name="item.value"></el-tab-pane>
</el-tabs>
...
export default {
? name: 'SearchTab',
? props: {
? ? name: String,
? ? activeTab: {
? ? ? type: String,
? ? ? default: '0'
? ? },
? ? list: Array
? },
? data() {
? ? return {
? ? ? active: this.activeTab
? ? }
? },
? watch: {
? ? active() {
? ? ? this.activeTab = this.active
? ? }
? },
? methods: {
? ? handleClick(val) {
? ? ? console.log(val)
? ? }
? }
}
...

vue2與vue3在自定義組件v-model的區(qū)別

在vue開發(fā)中,通常會對一個自定義的組件進行封裝,并實現(xiàn)v-model雙向綁定功能

在vue2中,通常這樣實現(xiàn)

父組件

<template>
? <Child v-model="number"></Child> ? ?
</template>
<script>
? export default {
? ? data() {
? ? ? return {
? ? ? ? number: 0
? ? ? }
? ? },
? ? components: {
? ? ? Child: () => import("./Child.vue")
? ? }
? }
</script>

子組件

<template>
? <button @click="handleClick">{{ value }}</button>
</template>
<script>
? export default {
? ? props: {
? ? ? value: Number
? ? },
? ? methods: {
? ? ? handleClick() {
? ? ? ? // 通過emit一個input事件出去,實現(xiàn) v-model
? ? ? ? this.$emit('input', this.value + 1)
? ? ? }
? ? }
? }
</script>

在vue3中,通過這樣實現(xiàn)

父組件

<template>
? <Child v-model="number"></Child> ? ?
</template>
<script lang="ts">
import { defineComponent, ref } from 'vue';
export default defineComponent({
? setup() {
? ? const number = ref(0);
? ? return {
? ? ? number
? ? };
? },
});
</script>

子組件

<template>
? <button @click="handleClick">{{ value }}</button>
</template>
<script lang="ts">
import { defineComponent } from 'vue';
export default defineComponent({
? props: {
? ? // 更換成了 modelValue
? ? modelValue: Number
? },
? setup(props, { emit }) {
? ? // 關(guān)閉彈出層
? ? const handleClick = () => emit('update:modelValue', props.modelValue + 1);
? ? return { handleClick };
? },
});
</script>

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

相關(guān)文章

  • Vue3中組件數(shù)據(jù)通信方式總結(jié)

    Vue3中組件數(shù)據(jù)通信方式總結(jié)

    如果在面試中,面試官問你Vue組件之間有哪些數(shù)據(jù)通信方式,你會怎么回復(fù),不要擔(dān)心,本文為大家整理了超全的Vue3中組件數(shù)據(jù)通信方式,需要的小伙伴快收藏起來吧
    2023-06-06
  • 前端通過vue調(diào)用后端接口導(dǎo)出excel表格基本步驟

    前端通過vue調(diào)用后端接口導(dǎo)出excel表格基本步驟

    在Vue前端項目中,可通過axios庫發(fā)送請求至后端獲取Excel下載鏈接,文中通過代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-10-10
  • nuxt+axios解決前后端分離SSR的示例代碼

    nuxt+axios解決前后端分離SSR的示例代碼

    這篇文章主要介紹了nuxt+axios解決前后端分離SSR的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • vue 實現(xiàn)在同一界面實現(xiàn)組件的動態(tài)添加和刪除功能

    vue 實現(xiàn)在同一界面實現(xiàn)組件的動態(tài)添加和刪除功能

    這篇文章主要介紹了vue 實現(xiàn)在同一界面實現(xiàn)組件的動態(tài)添加和刪除,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-06-06
  • Vue 計算屬性 computed

    Vue 計算屬性 computed

    這篇文章主要介紹了Vue 計算屬性 computed,一般情況下屬性都是放到data中的,但是有些屬性可能是需要經(jīng)過一些邏輯計算后才能得出來,那么我們可以把這類屬性變成計算屬性,下面我們來看看具體實例,需要的朋友可以參考一下
    2021-10-10
  • vue中transition動畫使用(移動端頁面切換左右滑動效果)

    vue中transition動畫使用(移動端頁面切換左右滑動效果)

    這篇文章主要介紹了vue中transition動畫使用(移動端頁面切換左右滑動效果),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 說說Vuex的getters屬性的具體用法

    說說Vuex的getters屬性的具體用法

    這篇文章主要介紹了說說Vuex的getters屬性的具體用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-04-04
  • 解決vue刷新頁面以后丟失store的數(shù)據(jù)問題

    解決vue刷新頁面以后丟失store的數(shù)據(jù)問題

    這篇文章主要介紹了解決vue刷新頁面以后丟失store的數(shù)據(jù)問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • 淺談vue獲得后臺數(shù)據(jù)無法顯示到table上面的坑

    淺談vue獲得后臺數(shù)據(jù)無法顯示到table上面的坑

    這篇文章主要介紹了淺談vue獲得后臺數(shù)據(jù)無法顯示到table上面的坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Vue解決移動端彈窗滾動穿透問題

    Vue解決移動端彈窗滾動穿透問題

    這篇文章主要介紹了Vue解決移動端彈窗滾動穿透問題的方法,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下
    2020-12-12

最新評論

肇庆市| 泸定县| 达孜县| 息烽县| 安阳县| 霸州市| 南丰县| 博乐市| 遂昌县| 新安县| 广州市| 扎囊县| 涟源市| 灌阳县| 若尔盖县| 思茅市| 康乐县| 关岭| 五常市| 汶上县| 博兴县| 浠水县| 洪湖市| 会同县| 西峡县| 安阳县| 横山县| 会泽县| 临澧县| 遂昌县| 江油市| 平南县| 湘潭市| 凉城县| 买车| 云龙县| 洮南市| 怀集县| 房产| 肥西县| 临湘市|