Vue3父子组件传值

咱就不说那些理论性的 东西了 ,直接上代码直接用

        这是V3最新版本的写法 不需要return

        

    <template>
 <MapPopup @mapPopups="mapPopups" v-if="state.mapPopup" :list="list"/>
    </template>
    <script lang="ts" setup>
    import MapPopup from './mapPopup.vue'    
    import { reactive , ref } from 'vue'
    const state = reactive({
      mapPopup: false,
    })
    const list = ref([]) as any //这里是V-bind 绑定的数据
    const mapPopups = (e : boolean) =>{
      state.mapPopu = e
    } //这里是自定义事件
    </script>
//这是父组件 纯手码 写错单词勿喷 我是个高贵的VScode用户

<template>
  <div class="mapPopup">
    <header class="mapHeader" @click="mapPopupClose">
    <span>这是子组件</span>
    </header>
  </div>
<template>
<script lang="ts" setup>
    const props = defineProps({
        list: {
            type: Array,
            default: () => []
        }
    })
        //通过emit实现子向父传值
    const emit = defineEmits(['mapPopups']) // 注册mapPopups自定义事件
    const mapPopupClose = () =>{
    consle.log(props.list) //打印父传过来的值 []
    emit('mapPopups', false) //通过emit 通知父组件调用函数
    }
    
    

</script
  

 纯手码 写错单词勿喷 我是个高贵的VScode用户

### Vue 3 父子组件教程 在 Vue 3 中,父子组件之间的数据递主要通过 `props` 和 `emit` 实现。父组件可以通过 `props` 将数据递给子组件,而子组件则可以通过 `emit` 触发事件将数据回父组件。 #### 父组件子组件 父组件可以使用 `props` 向子组件递数据。以下是一个完整的示例: ```vue <!-- ParentComponent.vue --> <template> <div> <h1>父组件</h1> <p>当前:{{ inputValue }}</p> <ChildComponent :value="inputValue" @update:value="handleInput" /> </div> </template> <script setup> import { ref } from &#39;vue&#39;; import ChildComponent from &#39;./ChildComponent.vue&#39;; // 定义父组件的数据 const inputValue = ref(&#39;初始&#39;); // 处理子组件的更新事件 const handleInput = (newValue) => { inputValue.value = newValue; }; </script> ``` 在此示例中,父组件通过 `:value` 将数据递给子组件,并监听 `update:value` 事件以接收子组件的更新[^1]。 #### 子组件父组件 子组件可以通过 `emit` 方法将数据发送回父组件。以下是子组件的实现: ```vue <!-- ChildComponent.vue --> <template> <div> <h2>子组件</h2> <input :value="modelValue" @input="updateValue" /> </div> </template> <script setup> defineProps({ modelValue: { type: String, required: true } }); const emit = defineEmits([&#39;update:modelValue&#39;]); const updateValue = (event) => { emit(&#39;update:modelValue&#39;, event.target.value); }; </script> ``` 在这个例子中,子组件通过监听 `input` 事件来捕获用户的输入,并通过 `emit` 方法触发 `update:modelValue` 事件将新递给父组件。 #### 使用 `v-model` 简化双向绑定 Vue 3 支持通过 `v-model` 实现父子组件之间的双向绑定。以下是如何结合 `v-model` 使用的示例: ```vue <!-- ParentComponent.vue --> <template> <div> <h1>父组件</h1> <p>当前:{{ inputValue }}</p> <ChildComponent v-model="inputValue" /> </div> </template> <script setup> import { ref } from &#39;vue&#39;; import ChildComponent from &#39;./ChildComponent.vue&#39;; const inputValue = ref(&#39;初始&#39;); </script> ``` ```vue <!-- ChildComponent.vue --> <template> <div> <h2>子组件</h2> <input :value="modelValue" @input="updateValue" /> </div> </template> <script setup> defineProps({ modelValue: { type: String, required: true } }); const emit = defineEmits([&#39;update:modelValue&#39;]); const updateValue = (event) => { emit(&#39;update:modelValue&#39;, event.target.value); }; </script> ``` 通过 `v-model`,父组件子组件之间的数据绑定变得更加简洁和直观。 #### 注意事项 - 父组件子组件递数据时,确保 `props` 的类型与数据一致。 - 子组件父组件递数据时,推荐使用标准化的事件名称(如 `update:modelValue`),以便代码更具可读性[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J小C=

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值