slots相关

slots相关

相关代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>composition API</title>
    <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
    <div id="root"></div>

    <script>
        const app=Vue.createApp({
            template:`
            <child style="color:red" :content='123'>parent</child>
            `,
        });
       app.component('child',{
           props:['content'],
           template:`<div class='myclass'>child</div>`,
           setup(prop,context){
               const {attrs,slots,emit}=context;
               const arr=slots.default();
               console.log(slots.default(),arr[0].children)
           }
       })
        const vm=app.mount('#root');
    </script>
</body>
</html>

问题描述:

1、怎么知道slots.default()返回的是虚拟DOM数组,是通过__v_isVNode: true?

2、以上代码 arr[0].props是null, 为什么,不应该是父组件的属性吗?

3、在父组件里 添加setup,打印slots,结果是{__vInternal: 1},子组件是{_: 1, __vInternal: 1, default: ƒ},为什么父组件里的slots没有default函数?

4、slots作用是什么?是为了子组件能获得父组件的信息?例如arr[0].childer就能知道父组件的包裹的内容,props传递父组件属性?


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕星星 2022-10-29 14:49:43

同学你好,解答如下:

1、是的。

2、props在子组件,父组件没有,而且插槽也不用props。setup中第一个参数是props

https://img1.sycdn.imooc.com//climg/635cccd909db1c9006620348.jpg

可以输出content

https://img1.sycdn.imooc.com//climg/635cc9a3096cbc4c04200039.jpg

arr[0].props值为null是正常的。

3、插槽一般用于子组件,父组件的slots中没有default函数,以输出为准。

4、slots是插槽,子组件接收父组件传入的模板内容。在前面课程中讲解过

https://img1.sycdn.imooc.com//climg/635ccb75097b128504950588.jpg

只不过vue3中可以在setup中解构使用,通过slots.default()拿父组件传入插槽的内容,然后再渲染

https://img1.sycdn.imooc.com//climg/635ccc95097f9b8a09660420.jpg

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师