[vue3]组件间v-bind,v-model传参(defineProps,defineEmits)

/ 1,573评论 / 12250阅读 / 2点赞

1. 自定义组件间也可以和普通标签(<div> <span>)一样指定属性传参

2. 形如(<child value="hello coolight"></child>)给组件<child>指定value属性为"hello coolight"

3. 我们也可以自己模拟v-model的效果

下面我们来聊聊怎么传参、接收与更新

传参,v-bind

<script setup>
import { toRefs } from 'vue';
const props = defineProps({
    text:{
        type:String,
        default:"默认:hello coolight",
        required:false
    }
})

const {
    text,
} = toRefs(props);
</script>

<template>
    <span>{{props.text}} - {{text}}</span>
</template>
<script setup>
import helloVue from '../../components/global/hello.vue';
</script>

<template>
    <div>
        <hello-vue />
        <hello-vue text="洛天依"/>
        <hello-vue :text="'v-bind:洛天依'" />
    </div>
</template>

v-model

一般的传参进来,组件对它是只读的,不能修改。

只读也并不完全,对于数组和对象是可以操作其内部值的。

但我们可以使用v-model指定参数,使之允许组件来修改它。

”只读“的探讨

<script setup>
import { reactive } from 'vue';
import { toRefs } from 'vue';
const props = defineProps({
    obj:{
        type:Object
    }
})

const {
    obj,
} = toRefs(props);

const btn1_click = () => {
    props.obj.hello = "coolight - 1";
}
const btn2_click = () => {
    props.obj = reactive({
        hello:"coolight - 2"
    })
}
</script>

<template>
    <div>
        <button @click="btn1_click">1: {{obj.hello}}</button>
        <button @click="btn2_click">2: {{obj.hello}}</button>
    </div>
</template>
<script setup>
import { reactive } from 'vue';
import helloVue from '../../../components/global/hello.vue';

let obj = reactive({
    hello:"洛天依"
})
</script>

<template>
    <div>
        <span>span: {{obj.hello}}</span>
        <hello-vue :obj="obj" />
    </div>
</template>

使用v-model

<script setup>
import { toRefs } from 'vue';
const props = defineProps({
    obj:{
        type:Object
    }
})
const emits =  defineEmits ({
    'update:obj':null  //null位置可以是一个检查函数,用以检查绑定这个信号的处理函数是否有接收参数等,这里就不需要了
});

const {
    obj,
} = toRefs(props);

const btn1_click = () => {
    props.obj.hello = "btn1";
}
const btn2_click = () => {
    emits('update:obj', {
        hello:"btn2"
    });
}
</script>

<template>
    <div>
        <button @click="btn1_click">{{obj.hello}} - 修改为 btn1</button>
        <button @click="btn2_click">{{obj.hello}} - 修改为 btn2</button>
    </div>
</template>
<script setup>
import { reactive } from 'vue';
import helloVue from '../../../components/global/hello.vue';

let mValue = reactive({
    obj:{
        hello:"洛天依"
    },
})
</script>

<template>
    <div>
        <span>span: {{mValue.obj.hello}}</span>
        <hello-vue v-model:obj="mValue.obj"/>
    </div>
</template>

尝试取代v-model

<script setup>
import { reactive } from 'vue';
import helloVue from '../../../components/global/hello.vue';

let mValue = reactive({
    obj:{
        hello:"洛天依"
    },
})
const change = (in_obj) => {
    console.log("我们的change");
    mValue.obj = in_obj;
}
</script>

<template>
    <div>
        <span>span: {{mValue.obj.hello}}</span>
        <!-- 也可以这样:
            <hello-vue v-model:obj="mValue.obj" @update:obj="change"/>
        -->
        <hello-vue :obj="mValue.obj" @update:obj="change"/>
    </div>
</template>
  1. Xazrruz说道:

    Здравствуйте!
    Сколько стоит получить диплом высшего и среднего образования легально?
    arusak-diploms-srednee.ru/kupit-diplom-v-krasnodare В 

  2. Lazrvwo说道:

    Здравствуйте!
    Мы можем предложить дипломы психологов, юристов, экономистов и других профессий по доступным тарифам.
    service.gnla.com.au/2024/06/30/купить-диплом-капитана/

  3. Manrxkz说道:

    Привет!
    Купить документ ВУЗа
    asxdiplomik.com/kupit-diplom-o-srednem-obrazovanii

  4. Xazrxez说道:

    Здравствуйте!
    Легальная покупка школьного аттестата с упрощенной программой обучения
    landik-diploms-srednee.ru/svidetelstvo-o-razvode В 

  5. Manraww说道:

    Привет, друзья!
    Приобрести документ о получении высшего образования
    diplomyx24.ru/kupit-diplom-moskva

  6. Lazrmon说道:

    Привет, друзья!
    Заказать диплом ВУЗа.
    bakinsky-dvorik.ru/club/user/127071/blog/4731/

  7. Dnrtvsn说道:

    Привет, друзья!
    Заказать документ о получении высшего образования вы имеете возможность в нашей компании.
    asxdiplomik.com/kupit-diplom-voronezh
    Успешной учебы!

  8. Dnrtacl说道:

    Привет, друзья!
    Купить документ о получении высшего образования можно в нашей компании.
    ast-diplomy24.ru/kupit-diplom-voronezh
    Успешной учебы!

  9. Uazrlie说道:

    Добрый день!
    Где купить диплом специалиста?
    my.omsystem.com/members/anthonyjoseph

  10. Dnrtvst说道:

    Здравствуйте!
    Купить документ ВУЗа можно у нас.
    ast-diplom24.ru/kupit-diplom-magistra
    Успехов в учебе!

  11. Diplomi_vzol说道:

    Добрый день!
    Купить документ о получении высшего образования можно в нашей компании.
    ast-diplom.com/kupit-diplom-krasnodar 

  12. Diplomi_jnol说道:

    Здравствуйте!
    Купить документ ВУЗа вы имеете возможность у нас в столице.
    asxdiplomik.com/kupit-diplom-bakalavra-ili-specialista 

  13. Diplomi_dbol说道:

    Привет, друзья!
    Купить документ ВУЗа можно у нас в столице.
    ast-diplom.com/kupit-diplom-perm 

  14. DanielGag说道:

    Останні новини світу https://uamc.com.ua про Україну від порталу новин Ukraine Today

  15. TerryPooca说道:

    Останні новини https://thingshistory.com зовнішньої та внутрішньої політики в країні та світі.

  16. Davidnic说道:

    Головні новини https://status.net.ua сьогодні, найсвіжіші та останні новини України онлайн

  17. Kevingom说道:

    Корисні та цікаві статті https://sevsovet.com.ua про здоров’я, дозвілля, кар’єру.

  18. When I originally commented I seem to have clicked on the -Notify me when new comments are added- checkbox and now every time a comment is added I receive four emails with the exact same comment. Perhaps there is a means you can remove me from that service? Cheers.

  19. Lazrrsn说道:

    Добрый день!
    Мы предлагаем дипломы психологов, юристов, экономистов и прочих профессий по приятным тарифам.
    suncityprinting.com/2024/06/30/купить-диплом-в-воткинске/

  20. Henrymen说道:

    Новини, останні події https://prp.org.ua в Україні та світі, новини політики, бізнесу та економіки, законодавства

  21. ShawnArede说道:

    Новини України https://sensus.org.ua та світу сьогодні. Головні та останні новини дня

  22. Richardson说道:

    Головні новини https://pto-kyiv.com.ua України та світу

  23. Derekexall说道:

    Новини та аналітика https://newsportal.kyiv.ua ситуація в Україні.

  24. JeromeZef说道:

    Головні новини https://mediashare.com.ua про регіон України. Будьте в курсі останніх новин

  25. Lazrkky说道:

    Добрый день!
    Купить диплом университета.
    alex-neil.ru/index.php/cb-profile/pluginclass/cbblogs?action=blogs&func=show&id=233

  26. JoshuaRef说道:

    Україна останні новини https://lentanews.kyiv.ua головні новини та останні події

  27. Davidanymn说道:

    Свіжі новини України https://lenta.kyiv.ua останні новини з-за кордону, новини політики, економіки, спорту, культури.

  28. KennethAgrip说道:

    Україна свіжі новини https://kiev-pravda.kiev.ua останні події на сьогодні

  29. Stephenlep说道:

    Популярные репортажи https://infotolium.com в больших фотографиях, новости, события в мире

  30. EddieFer说道:

    Новини України https://kiev-online.com.ua останні події в Україні та світі сьогодні, новини України за минулий день онлайн

  31. Dnrtdnt说道:

    Добрый день!
    Купить документ о получении высшего образования можно в нашей компании в столице.
    ast-diploms24.ru/otzyvy
    Успехов в учебе!

  32. Dnrtclo说道:

    Привет!
    Заказать документ университета вы можете в нашей компании в Москве.
    asxdiplomik24.ru/kupit-diplom-nizhnij-novgorod
    Успешной учебы!

  33. RobertArith说道:

    Новини сьогодні https://gau.org.ua останні новини України та світу онлайн

  34. HarrySwice说道:

    Новинний ресурс https://actualnews.kyiv.ua про всі важливі події в Україні та світі.

  35. Dnrtrqp说道:

    Добрый день!
    Купить документ о получении высшего образования можно в нашем сервисе.
    diplomyx.com/kupit-diplom-vracha
    Успехов в учебе!

  36. Jamesvaf说道:

    Останні новини України https://gromrady.org.ua сьогодні онлайн – головні події світу

  37. BrandonSaili说道:

    комплексное продвижение сайта сео продвижение сайта

  38. WilliamKeeno说道:

    заказать продвижение корпоративного сайта раскрутка сайта недорого

  39. Mazrpic说道:

    Привет!
    Где и как купить диплом о высшем образовании без лишних рисков
    myweektour.ru/legkiy-sposob-poluchit-diplom/

  40. Lazrdce说道:

    Привет!
    Мы изготавливаем дипломы любой профессии по приятным тарифам.
    social.acadri.org/read-blog/26391

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注