Vuejs插槽十八

<--! 使用插槽的组件(父组件)-->
<template>
  <div class="container">
    <div class="one">
      <category title="美食">
        <img src="./assets/logo.png" slot="center" />
        <a href="#" slot="footer">美食</a>
      </category>
      <!-- <category title="游戏">
        <ul slot="center">
          <li v-for="(g, index) in games" :key="index">{{ g }}</li>
        </ul>
        <a href="#" slot="footer">游戏</a>
      </category> -->
      <category title="电影">
        <h4>我插了一段视频</h4>
        <div class="film" slot="footer">
          <a href="#">经典</a>
          <a href="#">热门</a>
          <a href="#">推荐</a>
        </div>
      </category>
    </div>
    <div class="two">
      <slot-areas title="游戏">
        <template scope="{games}">
          <ul>
            <li v-for="(g, index) in games" :key="index">{{ g }}</li>
          </ul>
        </template> 
      </slot-areas>
    </div>
  </div>
</template>

<script>
import Category from "./components/Category";
import slotAreas from "./components/slotAreas";
export default {
  name: "App",
  data() {
    return {
      foods: ["小龙虾", "大闸蟹", "寿司", "甜肠"],
      // games: ["消消乐", "贪吃蛇", "数字游戏", "猜谜语"],
      films: ["大闹天宫", "蓝精灵", "红孩儿", "包青天"],
    };
  },
  components: { Category, slotAreas },
};
</script>
<--!默认插槽和具名插槽-->
<template>
  <div class="category">
    <h3>{{title}}分类</h3>
    <slot name="center">我是默认内容,当没有传递其它内容时,就是把我显示出来</slot>
    <slot name="footer">链接</slot>
  </div>
</template>

<script>
export default {
  name: 'Category',
  props: ['title']

}
</script>
<--!作用域插槽-->
<template>
  <div class="category">
    <h3>{{title}}分类</h3>
    <slot :games="games"></slot>
  </div>
</template>

<script>
export default {
  name: 'slotAreas',
  props: ['title'],
  data() {
    return {
      games: ["消消乐", "贪吃蛇", "超级玛利亚", "猜谜语"]
    }
  }
}
</script>
  • 将组件标签中的元素替换掉slot标签,slot标签不会再浏览器DOM结构中,具名插槽则是将所在插槽的标签放在插槽对应name属性的位置,不会将标签以外的内容放入进去;

  • template标签可以包裹元素,并且该标签不会展示在结果标签里面;

  • 默认插槽:在子组件中定义的时候写一个slot标签占位,可以在slot标签中写默认元素,然后在使用到子组件标签的地方在组件标签中写上自己需要的元素,如果没有写,就会显示默认slot里面的元素;

  • 具名插槽:在slot插槽上使用name属性给插槽标记,在使用的时候再标签元素上写slot属性是插槽的name属性,就可以将对应的元素替换到对应的插槽中;如果使用template包裹,在template上面就可以使用v-slot:插槽name属性的形式来写;

  • 作用域插槽:数据是在定义插槽的组件中,但是使用插槽在另一个组件,这样就可以在使用插槽的组件中用template把需要替换插槽的内容写在里面,template标签使用scope=“自定义”的形式,并且在定义插槽的slot上面把数据传递过去::data="data;传递到使用的组件scope的值就是传递过来的数据,该数据是一个对象,对象的key为数据的属性名,value就是数据的值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值