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

/ 6,044评论 / 26916阅读 / 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. Richardjab说道:

    male erectile dysfunction: ed pills that work quickly – erection pills that work

  2. Brandonnar说道:

    ed drugs list erectile dysfunction medication new treatments for ed

  3. This article is wonderful! Filled with valuable insights and extremely articulate. Thanks for sharing this.

  4. GregorySnino说道:

    ed medications comparison https://mexicanpharm24.pro/# buying prescription drugs in mexico

  5. AgustinFar说道:

    https://indianpharmdelivery.com/# buy prescription drugs from india
    buy medicines online in india

  6. Brandonnar说道:

    reputable indian online pharmacy mail order pharmacy india top online pharmacy india

  7. GregorySnino说道:

    best ed pills that work http://drugs24.pro/# buy prescription drugs without doctor

  8. DennisKek说道:

    ed supplements: best ed treatments – vacuum pumps for ed

  9. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: ремонт бытовой техники в челябинске
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  10. porn说道:

    Everything is very open with a very clear description of the challenges. It was truly informative. Your site is very helpful. Many thanks for sharing.

  11. Профессиональный сервисный центр по ремонту автомагнитол в Москве.
    Мы предлагаем: ремонт автомагнитол рядом
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  12. Michaelexiny说道:

    semaglutide Rybelsus 14 mg rybelsus

  13. Stevenmut说道:

    http://gabapentin.auction/# neurontin 100 mg cost
    zithromax online usa

  14. Michaelexiny说道:

    can you buy amoxicillin over the counter amoxil best price buy amoxicillin from canada

  15. Профессиональный сервисный центр по ремонту автомагнитол в Москве.
    Мы предлагаем: ремонт автомагнитолы
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  16. Ремонт телефонов说道:

    Профессиональный сервисный центр сервисный центр ремонт телефонов срочный ремонт сотовых телефонов

  17. Профессиональный сервисный центр по ремонту сотовых телефонов в Москве.
    Мы предлагаем: ремонт сотовых телефонов рядом
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  18. ThomasMog说道:

    אינטימיים הם חלק בלתי נפרד מחיינו, ואפשר לומר בלי בושה חלק מאיכות חיינו ובריאותנו. זאת מתי שבא לך. בסופו של דבר זוהי חגיגה אחת זהו בדיוק המקום שבו אתה רוצה להיות עכשיו. מאמר 4 דירות דיסקרטיות בבאר שבע – הפינוק של על להתנסות עם נשים אחרות. זה לא אומר hop over to this site

  19. Тут делают продвижение seo. медицинских. сайтов seo медицинских сайтов

  20. Stevenmut说道:

    https://amoxil.llc/# amoxicillin 500 mg tablet price
    buy zithromax 500mg online

  21. Тут делают продвижение seo для медицинского центра создание сайта для клиники

  22. Matthewobjet说道:

    purchase zithromax z-pak: zithromax for sale 500 mg – buy zithromax online cheap

  23. Тут делают продвижение разработка сайта для медицинского центра разработка сайта клиники

  24. Профессиональный сервисный центр по ремонту автомагнитол в Москве.
    Мы предлагаем: починить магнитолу
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  25. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: ремонт бытовой техники в барнауле
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  26. Matthewobjet说道:

    buy rybelsus: Buy semaglutide pills – rybelsus cost

  27. магазин сейфов предлагает сейф 3 класс взломостойкости сейф 3 класса

  28. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: ремонт крупногабаритной техники в челябинске
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  29. Профессиональный сервисный центр по ремонту сотовых телефонов в Москве.
    Мы предлагаем: ремонт мобильных телефонов в москве
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  30. Ремонт телефонов说道:

    Профессиональный сервисный центр сколько стоит ремонт телефона сколько стоит ремонт телефона

  31. магазин сейфов предлагает сейф 3 класс взломостойкости купить сейф 3

  32. Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
    Мы предлагаем: сервисные центры по ремонту техники в барнауле
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  33. Michaelexiny说道:

    zithromax prescription in canada can i buy zithromax online cost of generic zithromax

  34. Stevenmut说道:

    http://gabapentin.auction/# gabapentin medication
    zithromax prescription in canada

  35. Профессиональный сервисный центр по ремонту сотовых телефонов в Москве.
    Мы предлагаем: мастерская по ремонту телефонов
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  36. Ремонт телефонов说道:

    Профессиональный сервисный центр сервис ремонта телефонов сервисный центр смартфонов

  37. Michaelexiny说道:

    Semaglutide pharmacy price rybelsus generic Rybelsus 7mg

  38. Сервисный центр предлагает ремонт телефона highscreen адреса ремонт телефонов highscreen на дому

  39. Профессиональный сервисный центр по ремонту сотовых телефонов в Москве.
    Мы предлагаем: срочный ремонт телефонов москва
    Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!

  40. LEanbiome说道:

    Fantastic entry. I discovered the details highly helpful. Appreciated the method you explained all the points.

  41. ThomasOreva说道:

    לבקר דירות דיסקרטיות בחיפה ולהרים את מצב הרוח הן בדיוק מה שלבך מחפש ומה שגופך מבקש. החיים האלו לפעמים מלאים בדאגות, ובדיוק יפים וקסומים אם תרצה לחוות רגעים יפים וקסומים, אתה יכול למצוא אותם כאן קרוב ליד הבית. כל מה שאתה צריך זה לבקר המספקת את כל review

  42. Nicolasburne说道:

    https://semaglutide.win/# Rybelsus 14 mg

发表回复

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