VUE中的几种插槽

1.插槽

slot:内置的组件:可以将父组件中的子组件里面的模板数据进行显示 只有在子组件中有用
下面一个简单的使用

<body>
    <div id="app">
        <h2>这是父组件</h2>
       <child>
           <div>菜单一</div>
           <div>菜单二</div>
           <div>菜单三</div>
       </child>
    </div>
    <template id="child">
        <div>
            <h2>这是子组件</h2>
            <slot></slot>
        </div>
    </template>
    <script src="vue.js"></script>
    <script>
        let child={
            data(){
               return {}
            },
            template:"#child"
        }
       let vm=new Vue({
           el:"#app",
           data:{
            },
           components:{
            child
           }
       })
   </script>
</body>

这个是添加 插槽之前页面显示的样子
这个是添加 插槽之前页面显示的样子
这个是添加 插槽之后页面显示的样子
这个是添加 插槽之后页面显示的样子

2.具名插槽

  1. slot属性值和子组件中slot插槽中的name属性对应。
  2. 没有name属性的slot会解析默认的标签。
  3. 子组件的slot组件上的name属性会和父组件中的slot属性进行匹配,并按照子组件的顺序显示对应的模板数据
<body>
    <div id="app">
        <h2>这是父组件</h2>
        <child>
            <!-- // slot属性值和子组件中slot插槽中的name属性对应 -->
            <div slot="first">菜单一</div>
            <div>菜单二</div>
            <div>菜单三</div>
        </child>
    </div>
    <template id="child">
        <div>
            <h2>这是子组件</h2>
            <!-- 没有name属性的slot会解析默认的标签 -->
            <slot></slot>
            <!-- 子组件的slot组件上的name属性会和父组件中的slot属性进行匹配,并按照子组件的顺序显示对应的模板数据 -->
            <slot name="first"></slot>
         </div>
    </template>
    <script src="node_modules/vue/dist/vue.js"></script>
    <script>
        let  child = {
            data(){
                return {
                }
            },
            template:"#child"
        }
        let vm = new Vue({
            el:"#app",
            data:{
             },
            components:{
                child
            }
        })
    </script>
</body>

3.作用域插槽

slot-scope:作用域插槽;可以让我们在父组件这个位置取到子组件的数据,通过子组件的行间动态属性传过去

<body>
    <div id="app">
       <h2>这是父组件</h2>
       <child>
           <div slot-scope='abc'>{{abc.msg}}</div>
       </child>
    </div>
    <template id="child">
        <div>
            <h2>这是子组件</h2>
            //通过行间属性传过去
            <slot :msg='msg'></slot>
        </div>
    </template>
    <script src="vue.js"></script>
    <script>
        let child={
            data(){
               return {
                  msg:'hello'
               }
            },
            template:"#child"
        }
       let vm=new Vue({
           el:"#app",
           data:{
              msg:'world'
            },
           components:{
            child
           }
       })
  </script>
</body>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值