vue中的插槽(slot)

什么是插槽?插槽有哪些?如何定义插槽?如何向插槽中传值?

概念:

插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的<slot></slot>标签。

插槽分为三种:

           默认插槽、具名插槽、作用域插槽

一、 默认插槽:

默认插槽就是指没有名字的插槽,子组件未定义的名字的插槽,父级将会把 未指定插槽的填充的内容填充到默认插槽中。

 用法:

//子组件child
vue.component('child',{
template:'<div>
            <p>hello</p>
            <slot>**(可在此定义默认内容)**</slot>
         </div>'
    })

//父组件
<div>
    <child>
        <p>world</p>//插入slot的内容
    </child>
</div>

     注意:若是子组件中没有slot,则传入它的任何内容都会被抛弃

二、具名插槽(又称有名插槽):通过 name 属性设置了名字的插槽

具名插槽其实就是给插槽娶个名字。一个子组件可以放多个插槽,而且可以放在不同的地方,而父组件填充内容时,可以根据这个名字把内容填充到对应插槽中。

 用法:当我们需要多个插槽时,于是有了具名插槽,让插槽位置与插入的内容一 一对应

//父组件
<body-container>
  <div slot='header'>
    <!-- 我们希望把页头放这里 -->
  </div>
  <div slot='footer'> 
    <!-- 我们希望把页脚放这里 -->
  </div>
</body-container>

//子组件
<div>
    <slot name='header'></slot>
    <div>context</div>
    <slot name='footer'></slot>
</div>

三、 作用域插槽:

作用域插槽就是带数据的插槽

用法:

//子组件
<div class="box" v-for="item of list" :key="item.id">
      <div class="box-title">
        <p>
          <span>{{item.deNo}}</span>
          <!--我们为每个item准备了一个插槽,将item对象作为一个插槽的prop传入-->
            <slot class="genre" v-bind:item="item"></slot>
        </p>
        <p>{{item.deDate}}</p>
      </div>
    </div>
//父组件
<div>
    <!--1.作用域插槽必须是template开头和结尾的内容-->
    <!--2.slot-scope="props"声明从子组件传递的数据都放在props里-->
    <!--3.加上v-if="props.item!=undefined"判断,防止取不到item的属性-->
    <template slot-scope="props" v-if="props.item!=undefined">
        <!--告诉子组件模板的信息是以<span>标签的形式-->
                <span class="genre">{{props.item.state}}</span>
    </template>
</div>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值