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

yumo6666个月前 (04-29)技术文章56

插槽(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表单4(form的action、method属性)——零基础自学网页制作

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

JavaScript 控制文本框和文本域(js设置文本框内容)

文本框是表单中与用户打交道最多的元素之一,它包括单行文本框<input type="text">和多行文本框<textarea>,更广义的还可以包括密码输入框&...

HTML基础知识(三) HTML标签知识2(html标签及作用)

6.图像标签和路径(1) <img>标签用于定义图像,src为必须属性(2) 特点:属性采取键值对的格式,即key="value"(3) 路径a.目录文件夹和根目录(目录文...

6款优秀的报表表单设计器(如何设计报表)

VeryReport填报设计器VeryRepor表单设计器功能特点如下:1、拖拽式表单控件通过拖拽完成填报表单设计不同数据源单元设置任意数据库字段,实现任意复杂填报应用2、全面的表单控件支持文本、文本...

10个免费的HTML在线编辑工具(html 在线编辑功能)

onlinehtmleditor.net是非常简单和易用的HTML在线编辑器,适用的标签有H1,H2,H3,H4,P,IMG,List等,还可以在下方查看实时预览。你可以手动输入这些标签,也可以通过点...

不可不知的OA系统工作流管理知识(二)

在上一篇文章中,我们介绍了OA系统工作流中的表单分为三种类型:文档表单、电子表单、混合表单,并详细介绍了文档表单的特点。今天,我们继续以华天动力OA系统为样板,介绍另外两种类型的表单:电子表单和混合表...