vue插槽的使用

插槽使用:

父组件

<template>
  <div>
    <sonA>
      <template v-slot:header>
       <span>我是头部内容</span>
      </template>

      <template>
        <span>我是中间内容</span>
      </template>

      <template #footer>
        <span>我是底部内容</span>
      </template>
    </sonA>
  </div>
</template>

<script>
import sonA from '../components/sonA'
export default {
  name: "slots",
  data(){
    return {

    }
  },
  components:{
    sonA
  }
}
</script>

<style scoped>

</style>

子组件

<template>
  <div>
    <slot name="header"></slot>
    <br>
    <slot></slot>
    <br>
    <slot name="footer"></slot>
  </div>
</template>

<script>
export default {
  name: "sonA"
}
</script>

<style scoped>

</style>

作用域插槽:

开发中,遇到子组件拿到数据,要作用在父组件上,可以使用作用域插槽。

父组件:

<template>
  <div>
    <sonA>
      <template v-slot:header="{scoped}">
       <span>{{scoped.header}}</span>
      </template>

      <template #default="{scoped}">
        <span>{{scoped.middle}}</span>
      </template>

      <template #footer="{scoped}">
        <span>{{scoped.footer}}</span>
      </template>
    </sonA>
  </div>
</template>

<script>
import sonA from '../components/sonA'
export default {
  name: "slots",
  data(){
    return {

    }
  },
  components:{
    sonA
  }
}
</script>

<style scoped>

</style>

子组件:

<template>
  <div>
    <div v-for="(item,index) in list" :key="index">
      <slot :scoped="item" name="header"></slot>
      <br>
      <slot :scoped="item" name="default"></slot>
      <br>
      <slot :scoped="item" name="footer"></slot>
    </div>
  </div>
</template>

<script>
export default {
  name: "sonA",
 data(){
    return {
      list:[{header:'我是头部内容',middle:'我是中间内容',footer:'我是底部内容'}]
    }
 }
}
</script>

<style scoped>

</style>

也可以用解构的方式:

<template>
  <div>
    <sonA>
      <template v-slot:header="{scoped}">
       <span>{{scoped}}</span>
      </template>

      <template #default="{scoped}">
        <span>{{scoped}}</span>
      </template>

      <template #footer="{scoped}">
        <span>{{scoped}}</span>
      </template>
    </sonA>
  </div>
</template>

<script>
import sonA from '../components/sonA'
export default {
  name: "slots",
  data(){
    return {

    }
  },
  components:{
    sonA
  }
}
</script>

<style scoped>

</style>
<template>
  <div>
    <div v-for="({header,middle,footer},index) in list" :key="index">
      <slot :scoped="header" name="header"></slot>
      <br>
      <slot :scoped="middle" name="default"></slot>
      <br>
      <slot :scoped="footer" name="footer"></slot>
    </div>
  </div>
</template>

<script>
export default {
  name: "sonA",
 data(){
    return {
      list:[{header:'我是头部内容',middle:'我是中间内容',footer:'我是底部内容'}]
    }
 }
}
</script>

<style scoped>

</style>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值