vue具名插槽

本文通过一个App.vue和Category.vue组件的例子,展示了Vue.js中具名插槽的使用方法。在App.vue中,通过具名插槽`v-slot:footer`和`v-slot:center`将内容插入到Category组件的不同位置,实现定制化的布局。同时,介绍了如何传递数据到子组件并利用插槽功能。Category.vue定义了两个具名插槽,用于接收父组件传入的内容。
摘要由CSDN通过智能技术生成

vue具名插槽

1、 具名插槽就是给每一个插槽增加了一个name属性让每一个插槽都有自己的名字,这样方便,父组件中的配置按照相应的地方插入(插中间的插中间,插下面的插下面)

1)、App.vue代码:

<template>
  <div class="container">
    <Category title="美食">
      <img slot="center" src="D:\gr信息\图集\2.jpg" alt="1" />
      <a slot="footer" href="http://www.baidu.com/">牛肉饭</a>
    </Category>
    <Category title="游戏" :listData="games">
      <ul slot="center">
        <!-- 这时候因为变量直接在app.vue中所以可以直接去遍历game
        遍历完了再利用插槽的功能传递给Category.vue -->
        <li v-for="(g, index) in games" :key="index">
          {{ g }}
        </li>

        <div class="foot" slot="footer">
          <a href="http://www.baidu.com/">网络游戏</a>
          <a href="http://www.baidu.com/">单机游戏</a>
        </div>
      </ul></Category
    >

    <Category title="电影" :listData="films">
      <!--  controls 可以让video可以播放 -->
      <video
        slot="center"
        controls
        src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"
      ></video>

      <template v-slot:footer>
        <div class="dianyin" slot="footer">
          <a href="http://www.baidu.com/">经典</a>
          <a href="http://www.baidu.com/">热门</a>
          <a href="http://www.baidu.com/">推荐</a>
        </div>
        <h4>欢迎观影</h4>
      </template>
    </Category>
  </div>
</template>

<script>
import Category from "./components/Category";

export default {
  name: "App",
  components: { Category },
  data() {
    return {
      foods: ["火咕", "你肉", "丸子"],
      games: ["红警在线", "穿越火线", "劲舞团"],
      films: ["《教父》", "《拆弹专家》", "《牛逼》"],
    };
  },
};
</script>

<style>
.container,
.foot,
.dianyin {
  display: flex;
  justify-content: space-around;
}

video {
  width: 100%;
}

img {
  width: 100%;
}

h4 {
  text-align: center;
}
</style>

2)、Category.vue代码

<template>
  <div class="category">
    <h3>{{ title }}分类</h3>

    <!-- 定义一个默认插槽,那么App.vue中相应的组件标签里标签体的内容会往这个插槽中放置 -->
    <slot name="center"></slot>
    <slot name="footer"></slot>
  </div>
</template>

<script>
export default {
  name: "Category",
  props: ["title"],
};
</script>

<style>
.category {
  background-color: skyblue;
  width: 200px;
  height: 300px;
}
h3 {
  text-align: center;
  background-color: orange;
}
</style>
  • template 标签和 div的区别在于 template 可以包裹元素但是不会生成真实的DOM元素
  • 其中最新的vue2中template标签中具名插槽可以写成:v-slot:footer
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值