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

yumo6665个月前 (04-29)技术文章47

插槽(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>

相关文章

学习web前端开发,需要掌握哪些知识?

可以按照我的教学框架学习,能都掌握也就满足企业目前的人才需求。一、PC端页面重构1、认知行业、岗位、部分专业术语,就业趋势与行业未来展望;2、HTML5核心元素及布局应用;3、CSS3核心属性及布局应...

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

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

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

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

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

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

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

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

PHP入门读书笔记(十六):WEB页面使用PHP

Web表单主要用来在网页中发送数据到服务器,经过程序处理中,将用户所需要的信息再传递给客户端的浏览器上。这样就形成了一个浏览者和网站之间的一个互动。一、表单的提交方式<form name=’NA...