Vue3,插槽,slot,单个slot,具名slot,作用域slot,案例代码

yumo6663个月前 (04-29)技术文章24

插槽(slot)

插槽,也就是slot,是组件的一块HTML模板,一个slot最核心的两个问题是显示不显示和怎样显示。

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

单个slot

单个插槽,别名默认插槽、匿名插槽,不用设置name属性。

具名slot

给插槽起一个名字,插槽加了name属性,就变成了具名插槽。具名插槽可以在一个组件中出现N次,出现在不同的位置。

作用域slot

vue2.5版本中slot-scope取代了scope,来实现作用域插槽,主要用在组件调用中,具体在template标签上面使用slot-scope来获取插槽slot上面的属性值,获取值的为一个对象,slot-scope=”它可以取任意字符串”,在element-ui的组件中经常看到。

案例代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Vue,插槽slot</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.14/vue.js"></script>
</head>
<body>
<div id="app">
  <!-- 单个插槽,别名默认插槽、匿名插槽,不用设置name属性 -->
  <children1>
    <span>12345</span>
  </children1>
  <!-- 插槽加了name属性,就变成了具名插槽。具名插槽可以在一个组件中出现N次,出现在不同的位置 -->
  <children2>
    <span slot="first" @click="handFirst">12345</span>
    <span slot="second">56789</span>
  </children2>
  <!-- 将数据传递给组件 -->
  <tb-list :data="data">
    <!-- 获取slot上面的值 -->
    <template slot-scope="scope">
      <!-- {"row":{"name":"张三","age":"39","sex":"男"},"$index":0} -->
      <p>row:{{JSON.stringify(scope)}}</p>
      <p>索引:{{scope.$index}}</p>
      <p>姓名: {{scope.row.name}}</p>
      <p>年龄: {{scope.row.age}}</p>
      <p>性别: {{scope.row.sex}}</p>
    </template>
  </tb-list>
</div>

<script type="text/javascript">
  var app = new Vue({
    el: '#app',
    data: {
      data: [{
        name: '张三',
        age: '39',
        sex: '男'
      }]
    },
    methods: {
      handFirst: function () {
        console.log("It is the parent's method");
      }
    },
    components: {
      // 单个slot
      children1: {
        template: "<button><slot></slot>单个插槽</button>"
      },
      // 具名slot
      children2: {
        template: "<button><slot name='first'></slot>具名插槽,<slot name='second'></slot></button>"
      },
      // 作用域slot
      'tb-list': {
        template:
            `<ul>
                <li v-for="(item, index) in data">
                    <slot :row="item" :$index="index"></slot>
                </li>
            </ul>`,
        // 获取值
        props: ['data']
      }
    }
  });
</script>
</body>
</html>

相关文章

HTML表单及其Input输入类型(html表单的输入框代码)

HTML 表单用于搜集不同类型的用户输入。HTML5 Input,拥有多个新的表单输入类型,提供了更好的输入控制和验证,今天将为大家带来HTML中的表单及其input输入类型。一、HTML表单1、HT...

HTML表单4(form的action、method属性)——零基础自学网页制作

表单的工作过程表单的信息发送与处理过程可以简单的进行图示,如下图。以注册会员为例,用户在自己的电脑上打开相应的注册表单页面填写信息,完成填写后点击提交按钮,也就是图中1所示过程。这时浏览器会将这些信息...

DOM - 根据ID访问HTML元素(根据id获取元素的jquery方法)

根据ID访问HTML元素如下方法实现document.getElementById(idVal):返回文档中id属性值为idVal的HTML元素。上面这个方法简单易用,只要被访问HTML元素具有唯一的...

html5学得好不好,看掌握多少标签

html5你了解了多少?如果你还是入门阶段的话,或者还是一知半解的话 ,那么我们专门为你们收集的html5常用的标签大全对你就很有帮助了,你需要了解了html5有哪些标签你才能够更好的。驾驭html5...

适用于PHP的可视化HTML编辑器推荐

Tinymce是一个免费的WYSIWYG HTML编辑器,由JavaScript写成。它是一个根据LGPL license发布的自由软件。Tinymce可以将文本区转换为富文本HTML编辑器,并可以嵌...

适用于Mac的最佳HTML文本编辑器,编码开发必备

一个好的文本编辑器对于想要建立网站或进行编码的任何人都是必不可少的。这对于习惯于面面俱到的环境的Mac开发人员而言更加明显。对于他们来说存在一系列不同的优质软件之选。今天小编将介绍几款Mac上好用的H...