Vue 插槽

如果向组件标签中输入内容,会被忽略掉
1、props接受父组件传递过来的数据
2、插槽,接受父组件向子组件传递的html文本
在组件中通过slot标签可以接收父组件传递过来的html文本,就是将slot标签添加到template标签中
如下:现在组件中添加标签
        <sub-component :pmsg='msg'>
         <h3>sub-component之间的内容</h3>
        </sub-component>

再在template设置slot标签,以显示组件中添加的标签

复制代码
    <template id="subComponent">
        <div>
            <h2>subComponent组件</h2>
            <p>subComponent组件数据{{username}}</p>
            <p>父组件传递过来的数据:{{pmsg}}</p>
            <slot></slot>
        </div>
        
    </template>
复制代码

 

 vue插槽后备内容

后备内容
有时为一个插槽设置具体的后备(也就是默认的)内容是很有用的,
他只会在没有提供内容的时候被渲染
 具名插槽:
如果定义了多个插槽,想把指定内容放到指定插槽中,
默认情况下:
当使用组件时,组件定义的所有html文本都会放到插槽里面
因此,需要给插槽取一个名字。同时,在向具名插槽提供内容的时候,我们可以在一个template元素上是用
v-slot指令,并已v-slot的参数的形式提供其名称。
复制代码
    <div id="app">
        <base-layout id="layout">
            <!-- 当使用组件时,组件定义的所有html文本都会放到插槽里面 
                  在向具名插槽提供内容的时候,我们可以在一个template元素上是用
                  v-slot指令,并已v-slot的参数的形式提供其名称
            -->
            <template v-slot:header>
                <h3 >我是要插入的头部内容</h3>
            </template>
            
            <template v-slot:main>
                <h3>我是要插入的主体内容</h3>
            </template>
            
            <template v-slot:footer>
                <h3>我是要插入的底部内容</h3>
            </template>
            
        </base-layout>
    </div>
    <!-- 定义一个组件,在组件内部定义多个插槽 -->
    <template id="baseLayout">
        <div>
            <header>
                <p>头部</p>
                <!-- slot内容的默认值是defalut -->
                <slot name="header"></slot>
            </header>
            <main>
                <p>主题</p>
                <slot></slot>
            </main>
            <footer>
                <p>底部</p>
                <slot name="footer"></slot>
            </footer>
        </div>
    </template>
    <script src="../js/vue.js"></script>
    <script>
        Vue.component('baseLayout', {
            template:'#baseLayout',
            data () {
                return {
                    username:'tom'
                }
            },
            props: ['pmsg']
        })
        let vm = new Vue({
            el : "#app",
            data : {
                msg:'hello vue'
            },
            components: {
                'btn-tpl' : {
                    template:'#btn-tpl'
                }
                
            }
        })
    </script>
复制代码

 

 
posted @   洛飞  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示