Vue 深入理解vue中的slot与slot-scope

深入理解vue中的slot与slot-scope
官网插槽
Vue中插槽-----特殊特性slot、slot-scope与指令v-slot的使用方法
Vue的slot-scope的场景的个人理解

总结
  1. .slot插槽(不具名)相当于在子组件中占有一个位置,父组件可以填入文本内容
  2. 具名就是子组件name="xxx"父组件slot=“xxx” 例如:
 <div slot="header">这里是头部</div>
 <slot name="footer"></slot>

3.v-slot使用:v-slot在组件中使用slot进行占位时,也是在slot标签内使用name 属性给slot插槽定义一个名字。但是在html内使用时就有些不同了。需要使用template模板标签,template标签内,使用v-slot指令绑定插槽名,标签内写入需要添加的内容

父组件:
<template v-slot:header>//v-slot指令使用插槽
   <h2>slot头部内容</h2>
</template>
子组件:
 <slot name = "header"></slot>//具名插槽
  1. 作用域插槽(slot-scope使用):
    a、:在组件模板中书写所需slot插槽,并将当前组件的数据通过v-bind绑定在slot标签上。
    b、:在组件使用时,通过slot-scope=“gain”,接收组件中slot标签上绑定的数据。
    c、:通过gain.xxx就可以使用绑定数据了
<body>
   <div id="app">
      <Test>
         <div slot="default" slot-scope="gain">//作用域插槽的用法(slot-scope)
            {{ gain.msg }}   // gain接收slot=default所有数据,这里msg只是其中一个
         </div>
         
      </Test>
   </div>

   <template id="test">
      <div>
         <slot name="default" :msg="msg"> </slot>
         <p>这里是test组件</p>   // 
      </div>
   </template>
</body>
<script>
   new Vue({
      el:"#app",
      components:{
         'Test':{
            template:"#test",
            data(){
               return {
                  msg:"你好"
               }
            },
         }
      }
   })
</script>

5.作用域插槽:v-slot的用法(和slot-scop用法类似)

<body>
   
   <div id="app">
      <Test>
         <template v-slot:header="gain">//v-slot定义作用域插槽
            <div>
                  <h3>slot</h3>
                  <p> {{gain.msg}} </p>
            </div>
         </template>
           
      </Test>
   </div>
   
   <template id="test">
      <div>
         <slot name="header":msg="msg"></slot>
         <p>这里是test组件</p>
      </div>
   </template>
   
</body>
<script>
   Vue.component('Test',{
      template:"#test",
      data(){
         return {
            msg:'这里是头部'
         }
      }
   });

   new Vue({

   }).$mount("#app")
</script>

  1. 解构插槽 Prop
 data(){
   return {
        msg: {
          a: '111'
        },
        msg2: {
          b: '111'
        }
     }
  }
 // 解构插槽 Prop
 <slot name="header":msg="msg" :msg2="msg2"></slot>
 <template v-slot:header="{ msg }">//v-slot定义作用域插槽
    <div>
          <h3>slot</h3>
          <p> {{msg.a}} </p>
    </div>
 </template>
 //你甚至可以定义后备内容,用于插槽 prop 是 undefined 的情形:
 template v-slot:header="{ msg = {a = "222"} }">
    <div>
          <h3>slot</h3>
          <p> {{msg.a}} </p> //undefined 就是222
    </div>
 </template>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值