• Vue2 06 插槽 slot


    6.1 插槽 slot


    插槽这个东西还是很重要的。我们都学习过 html 的 列表吧

    <ul>
    	<li>li>
    ul>
    
    • 1
    • 2
    • 3

    其实插槽 就类似于 这里面的

  • 。就是 相当于 标签下面的子标签。而我们 插槽 就可以实现这个东西。又因为 是 Vue 写的,所以比原生态的 强大很多。

    我们知道,在 Vue 里面,只有 组件的概念,没有标签的概念。

    所以 我们 要 新建 一个 自定义组件

    1. 新建 自定义组件,并且 设定好 插槽!

    \ 反斜杠 在 template 的字符串值里面 代表着 回车换行!

      Vue.component("mqy",{
          template: '
    \\
    ' })
    • 1
    • 2
    • 3
    1. 建立 那两个插槽 应该插入的 子组件。
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>插槽 slot 的应用title>
    head>
    <body>
    
    <div id="vue">
        <mqy>
        mqy>
    div>
    
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
    <script>
      Vue.component("mqy",{
          template: '
    \\
    '
    }); Vue.component("mqy-title",{ props: ['value'], template: '
    {{value}}
    '
    }); Vue.component("mqy-item",{ props: ['value'], template: '
  • {{value}}
  • '
    });
    script> body> html>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    1. slot 的使用方法
    <div id="vue">
        <mqy>
            <mqy-title slot="mqy-title" v-bind:value="title">mqy-title>
            <mqy-item v-for="item in arr" slot="mqy-item" v-bind:value="item">mqy-item>
        mqy>
    div>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    slot="name名字" 意思是 往 父组件的 哪个插槽 的地方 去插入!

    1. data 里面 写 绑定的 数据
      let vm = new Vue({
          el: "#vue",
          data: {
              title: "标题",
              arr: ["Java","前端","linux"]
          }
      })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 成品
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>插槽 slot 的应用title>
    head>
    <body>
    
    <div id="vue">
        <mqy>
            <mqy-title slot="mqy-title" v-bind:value="title">mqy-title>
            <mqy-item v-for="item in arr" slot="mqy-item" v-bind:value="item">mqy-item>
        mqy>
    div>
    
    
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
    <script>
      Vue.component("mqy",{
          template: '
    \\
    '
    }); Vue.component("mqy-title",{ props: ['value'], template: '
    {{value}}
    '
    }); Vue.component("mqy-item",{ props: ['value'], template: '
  • {{value}}
  • '
    }); let vm = new Vue({ el: "#vue", data: { title: "标题", arr: ["Java","前端","linux"] } })
    script> body> html>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    在这里插入图片描述

    微信小程序的 框架,很多的组件,就用到了 插槽。就是 一个组件里面 可能 还有 子组件。比如说 scroll 组件,里面就有 scroll-item 组件。

    1. 直接从 slot 里面 拿到 组件标签之间的 text 部分

    有的人 肯定会觉得 这样子 好麻烦呀,我就是想 给这个 组件设定一个 数据 为毛 还要什么 数据绑定??难道不能直接 是一个 静态数据吗?比如 说 在 数据内容 组件标签之间拿到 这个数据!

    答案是:可以的!

    this.$slots.default[0].text 就可以拿到组件标签之间的那个内容。在这里插入图片描述

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>插槽 slot 的应用title>
    head>
    <body>
    
    <div id="vue">
        <mqy>
            <mqy-title slot="mqy-title" v-bind:value="title">Fuck!mqy-title>
            <mqy-item v-for="item in arr" slot="mqy-item" v-bind:value="item">mqy-item>
        mqy>
    div>
    
    
    <script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
    <script>
      Vue.component("mqy",{
          template: '
    \\
    '
    }); Vue.component("mqy-title",{ props: ['value'], template: '
    {{this.$slots.default[0].text}}
    '
    }); Vue.component("mqy-item",{ props: ['value'], template: '
  • {{value}}
  • '
    }); let vm = new Vue({ el: "#vue", data: { title: "标题", arr: ["Java","前端","linux"] } })
    script> body> html>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    在这里插入图片描述

  • 相关阅读:
    GitHub Codespaces 安装 .NET 7
    求解 算法 二分归并排序
    行为型:迭代器模式
    论文速览 | arxiv 2023, 马氏距离感知训练在分布外检测中的应用
    pandas横向运算
    使用cannon.js创建3D物理仿真场景
    centos7部署elk日志系统
    php中通用的excel导出方法实例
    Grafana----Grafana快速体验
    【假设检验】MATLAB实现K-S检验
  • 原文地址:https://blog.csdn.net/qq_52606908/article/details/126027335