• Vue.js之组件插槽的使用


    目录

    1.基本使用

    2.具名使用

    (1).单个标签的指定

    (2).多个标签的指定

    3.父组件操纵子组件的内容


    本文主要介绍Vue.js中组件插槽的使用,包括基本使用、具名使用以及父组件操纵子组件的内容。

    1.基本使用

    (1).在子组件插槽中填写的内容对应的就是子组件模板内的slot标签;

    (2).子组件插槽中若没有内容,同时slot内有内容,默认会显示slot中的内容

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. <style>
    9. .test {
    10. border: 2px solid red;
    11. width: 100px;
    12. padding: 20px;
    13. }
    14. style>
    15. head>
    16. <body>
    17. <div id="app">
    18. <test class="test">插槽的内容test>
    19. <test class="test">test>
    20. div>
    21. <script src="./vue.min.js">script>
    22. <script>
    23. Vue.component('test', {
    24. data: function() {
    25. return {}
    26. },
    27. template: `
    28. 默认内容
    29. `
  • });
  • let vu = new Vue({
  • el: '#app'
  • })
  • script>
  • body>
  • html>
  •  

     

     

    2.具名使用

    上面基本的使用中,slot是文本内容,并不是标签。具名使用则会进行匹配,从而使得slot显示指定的标签内容。

    (1).单个标签的指定

    需要在子组件使用时为标签添加slot属性并取一定的值,之后在子组件模板中的slot标签中添加name并赋值之前slot的属性值即可。

    (2).多个标签的指定

    通过template标签指定,匹配方法同上

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. <style>
    9. .test {
    10. border: 2px solid red;
    11. width: 100px;
    12. }
    13. style>
    14. head>
    15. <body>
    16. <div id="app">
    17. <test class="test">
    18. <p slot="t1">标题信息p>
    19. <p slot="t2">底部信息p>
    20. <section>无匹配section>
    21. <template slot="t3">
    22. <p>ap>
    23. <p>bp>
    24. <p>cp>
    25. <p>dp>
    26. template>
    27. test>
    28. div>
    29. <script src="./vue.min.js">script>
    30. <script>
    31. Vue.component('test', {
    32. data: function() {
    33. return {
    34. count: 0,
    35. num: 100
    36. }
    37. },
    38. template: `
    39. <div>
    40. <slot name='t1'>slot>
    41. <slot name='t2'>slot>
    42. <slot>slot>
    43. <slot name='t3'>slot>
    44. <div v-text="count">div>
    45. <button @click="count+=num">点击button>
    46. div>`
    47. });
    48. let vu = new Vue({
    49. el: '#app',
    50. data: {},
    51. methods: {}
    52. })
    53. script>
    54. body>
    55. html>

     

     

    3.父组件操纵子组件的内容

    (1)子组件的模板中添加slot并绑定列表元素

    1. template: `
  • `
  •  (2)子组件使用时通过slot-scope获取子组件中的数据,同时完成操作

    1. <fruit-list :flist="list">
    2. <template slot-scope="slotProps">
    3. <strong class="orange" v-if="slotProps.i.id==2" >{{slotProps.i.name}}strong>
    4. <span v-else >{{slotProps.i.name}}span>
    5. template>
    6. fruit-list>
    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
    7. <title>Documenttitle>
    8. <style>
    9. .orange {
    10. color: orange;
    11. font-size: 40px;
    12. }
    13. style>
    14. head>
    15. <body>
    16. <div id="app">
    17. <fruit-list :flist="list">
    18. <template slot-scope="slotProps">
    19. <strong class="orange" v-if="slotProps.i.id==2" >{{slotProps.i.name}}strong>
    20. <span v-else >{{slotProps.i.name}}span>
    21. template>
    22. fruit-list>
    23. div>
    24. <script src="./vue.min.js">
    25. script>
    26. <script>
    27. Vue.component('fruit-list', {
    28. props: ['flist'],
    29. data: function() {
    30. return {}
    31. },
    32. template: `
      • `
      • })
      • let vu = new Vue({
      • el: "#app",
      • data: {
      • list: [{
      • id: 1,
      • name: 'apple'
      • }, {
      • id: 2,
      • name: 'orange'
      • }, {
      • id: 3,
      • name: 'pear'
      • }]
      • }
      • })
      • script>
      • body>
      • html>

       

       

      当然,也可以直接在子组件的模板中进行操作。效果同上。

      1. html>
      2. <html lang="en">
      3. <head>
      4. <meta charset="UTF-8">
      5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
      6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
      7. <title>Documenttitle>
      8. <style>
      9. .orange {
      10. color: orange;
      11. font-size: 40px;
      12. }
      13. style>
      14. head>
      15. <body>
      16. <div id="app">
      17. <fruit-list :flist="list">
      18. fruit-list>
      19. div>
      20. <script src="./vue.min.js">
      21. script>
      22. <script>
      23. Vue.component('fruit-list', {
      24. props: ['flist'],
      25. data: function() {
      26. return {}
      27. },
      28. template: `
      29. <ul>
      30. <li v-for="item in flist" :key="item.id">
      31. <strong class="orange" v-text="item.name" v-if="item.id==2">strong>
      32. <span v-text="item.name" v-else>span>
      33. li>
      34. ul>
      35. `
      36. })
      37. let vu = new Vue({
      38. el: "#app",
      39. data: {
      40. list: [{
      41. id: 1,
      42. name: 'apple'
      43. }, {
      44. id: 2,
      45. name: 'orange'
      46. }, {
      47. id: 3,
      48. name: 'pear'
      49. }]
      50. }
      51. })
      52. script>
      53. body>
      54. html>

    33. 相关阅读:
      27m3氨基酸发酵反应釜设计
      android 切换系统键盘笔记
      VS中cmake多配置构建设置
      3.2python使用 matplotlib 实现可视化_python量化实用版教程(初级)
      基于象鼻虫损害优化算法求解单目标无约束问题并可视化分析(Matlab代码实现)
      数据分析 — Numpy 数组处理
      All data types in Python are “reference type“
      Lua脚本语言
      好用的在线客服系统PHP源码(开源代码+终身使用+安装教程)
      在Kubernetes环境中有关Nginx Ingress与API Gateway的连接问题
    34. 原文地址:https://blog.csdn.net/weixin_44827643/article/details/125896809