用作用域slot父子传参

文章讲述了在Vue应用中,如何通过父组件的`v-bind`或`v-slot`属性向子组件传递数据,以及子组件如何通过`defineProps`方法接收和处理这些数据,重点介绍了slot的使用方法。
摘要由CSDN通过智能技术生成

具体原理

我们在父组件里获取的信息,然后用:xxx = "数据";的方法传递给子组件

子组件用defineprops方法获取以后,渲染,然后再遍历的地方写一个slot

slot标签通过$

               <slot :$row="item">

               </slot>

传递

父组件用template标签的属性获取,比如v-slot='item'这种方法获取

父标签

​
<template>
    <div class="parent">
        <h1>爸爸。。。。。</h1>
     
        <button >james</button>
         这个是我从父组件传递给子组件的数组
        <SlotA :arrTodo="arrTodo">
            然后我们用这个v-slot方法获取子组件里循环的数据,
            <template v-slot="item">
                {{ item }}
            </template>
        </SlotA>
        
    </div>
</template>
<script setup lang="ts">
import SlotA from "./SlotA.vue"
import {onMounted, ref}  from "vue";
const arrTodo = ref([
    {id:1,title:"做饭",done:false},
    {id:1,title:"睡觉",done:false},
    {id:1,title:"1111",done:false},
    {id:1,title:"宿舍",done:true},
    {id:1,title:"不不不",done:true},
])
onMounted(()=>{
})
</script>
<style scoped>
   .parent{
      width: 500px;
      height: 500px;
      background: pink;
   }
</style>

​

子组件的代码

<template>
    <div class="parent">
        <h1>儿子。。。。。</h1>
        <p>这里是儿子</p>
          <slot>
            科比
          </slot>
        <button>james</button>
        <!-- <p>{{ arrTodo }}</p> -->
        <ul>
            <li   v-for="(item,index) in arrTodo" :key="index" >
                这里是方法的重点,我们获取以后,用:$row="item"方法把数据传递给父组件
               <slot :$row="item">
               </slot>
            </li>
        </ul>
    </div>
</template>
<script setup lang="ts">
用这个defineProps方法获取arrTodo数据,是自定义事件里获取的
defineProps(['arrTodo'])
import {onMounted, ref}  from "vue";
onMounted(()=>{ 
})
</script>
<style scoped>
   .parent{
      width: 500px;
      height: 500px;
      background: pink;
   }
</style>

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Vue 3中,组件向子组件传递数据主要有以下几种方式: 1. Props(属性):这是最常见的父子组件通信方式。组件通过`props`对象将数据作为参数传递给子组件。子组件通过`props`接收这些值,并可以在模板或方法中使用它们。定义Props时,通常使用`prop`选项,并设置`required`、`default`等属性来指定是否必需以及默认值。 ```javascript // 组件 <template> <ChildComponent :message="parentMessage" /> </template> <script> export default { components: { ChildComponent }, data() { return { parentMessage: 'Hello, from Parent!' }; } }; </script> ``` 2. 自动绑定的Props:如果不想在每个子组件上显式地声明`v-bind:prop`,可以使用`setup()`钩子在子组件内部自动监听props的变化,如`defineProps`。 ```javascript // 子组件(Vue 3 Composition API) import { defineProps } from 'vue'; setup(props) { const message = props.message; // 接收props return { message }; } ``` 3. Computed Properties:如果数据计算依赖于其他props,可以使用Vue的Computed属性来处理。 4. Event Emitter:如果需要双向绑定,组件可以通过`$emit`触发自定义事件,子组件通过`v-on`监听并处理这些事件。 5. Ref 和_slots:对于更复杂的交互,可以考虑使用Vue的Ref来管理状态,并在`<slot>`标签中传递内容。 相关问题: 1. Vue 3中如何在不使用Props的情况下传递数据? 2. 如何在子组件中响应组件传递的props的改变? 3. 在Vue 3的Composition API中,如何使用`defineEmits`来处理事件?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值