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

插槽(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——列表标签和表单标签(html列表标记)

列表标签在html中列表分为无序列表、有序列表和自定义列表(项目列表)。接下来就看看他们有什么不同吧!作用:如果说table标签是用来显示数据的,那么列表标签就是用来进行html页面布局的。无序列表语...

HTML5教程从入门到精通,随堂笔记(二)H5的form标签

HTML5从入门到精通,兄弟连京修随堂笔记(二)HTML的框架结构,每日都有新内容,订阅走一波HTML5的form标签问:网站怎样与用户进行交互? 答案:使用HTML表单(form).表单是可以把浏览...

html中input、label、form、textarea、select

表单input:表单是用来收集信息的,由表单控件(表单元素)、提示信息、表单域构成。input控件的属性及值:除以上属性外,input元素type属性还有一个number属性值,此为仅可以填数字,默认...

html开发笔记22-表单元素「用户名、密码、单选框、多选框」

一、表单元素介绍【用户名、密码、单选框、多选框】1、表单:就是从网页上看见的各种各样的框,比如 登陆框、同意协议的选项框、下拉框、只能选男女的选框等。二、演示:主要代码在下面三、代码实现:用户名、密码...

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

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