• vue中插槽的详解


    目录

    1. slot-插槽的基本使用

    1.1什么是插槽?

     1.2默认插槽

    2.具名插槽:(有名字的插槽)

    3.作用域插槽: 

     3.1接收作用域插槽几种写法:

    3.2完整代码


    1. slot-插槽的基本使用

    1.1什么是插槽?

    插槽(Slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。可以把插槽认为是组件封装期间,为用户预留的内容的占位符。

     1.2默认插槽

    1. <body>
    2. <div id="app">
    3. <cpn>
    4. <h2 style="color: red;">我们在学习插槽h2>
    5. cpn>
    6. div>
    7. <template id="cpn">
    8. <div class="cpn">
    9. <h2>{{msg}}h2>
    10. <script src="js/v2.6.10/vue.js" type="text/javascript" charset="utf-8">script>
    11. head>
    12. <body>
    13. <div id="app">
    14. <cpn>
    15. <span>111222333span>
    16. <span slot="left">这是左边具名插槽span>
    17. <span slot="center">这是中间具名插槽span>
    18. <span slot="right">这是右边具名插槽span>
    19. cpn>
    20. div>
    21. <template id="cpn">
    22. <div class="cpn">
    23. <h2>{{msg}}h2>
    24. <slot name="center">slot>
    25. <slot name="left">slot>
    26. <slot name="right">slot>
    27. <slot>没有具名的插槽slot>
    28. div>
    29. template>
    30. <script>
    31. const cpn = {
    32. template: '#cpn',
    33. data() {
    34. return {
    35. msg: '我们晚上也在上课 很努力'
    36. }
    37. }
    38. }
    39. const vm = new Vue({
    40. el: '#app',
    41. data() {
    42. return {}
    43. },
    44. components: {
    45. cpn
    46. }
    47. })
    48. script>
    49. body>
    50. html>

    文字的内容位置,是根据插槽的位置决定的,插槽就相当于电脑里的usb接口,在父组件中去接收就相当于优盘插入插槽,一一对应。

    3.作用域插槽: 

    组件内变量绑定在slot上, 然后使用组件v-slot:插槽名字="变量" ,变量上就会绑定slot传递的属性和值

    什么时候用到作用域插槽?父组件中如果想使用子组件中的数据进行自定义内容的渲染

     

     3.1接收作用域插槽几种写法:

    3.2完整代码

    (父组件app)

    1. <template>
    2. <div id="app">
    3. <my-header>
    4. <template #default='list'>
    5. <ul>
    6. <li v-for="(item,index) in list.moves" :key="index">{{item}}li>
    7. ul>
    8. template>
    9. my-header>
    10. <my-header>
    11. <template slot-scope="list">
    12. <ol>
    13. <li v-for="(item,index) in list.moves" :key="index">{{item}}li>
    14. ol>
    15. template>
    16. my-header>
    17. <my-header>
    18. <template v-slot:default="list">
    19. <h3 v-for="(item,index) in list.moves" :key="index">{{item}}h3>
    20. template>
    21. my-header>
    22. div>
    23. template>
    24. <script>
    25. import MyHeader from "./components/MyHeader.vue";
    26. export default {
    27. name: "App",
    28. components: {
    29. MyHeader,
    30. },
    31. };
    32. script>
    33. <style>
    34. #app {
    35. font-family: Avenir, Helvetica, Arial, sans-serif;
    36. -webkit-font-smoothing: antialiased;
    37. -moz-osx-font-smoothing: grayscale;
    38. text-align: center;
    39. color: #2c3e50;
    40. margin-top: 60px;
    41. display: flex;
    42. justify-content: space-around;
    43. }
    44. style>

    (子组件中)

    1. <template>
    2. <div class="header">
    3. <h2>{{msg}}h2>
    4. <slot :moves='moves'>我是默认内容slot>
    5. div>
    6. template>
    7. <script>
    8. export default {
    9. name: "MyHeader",
    10. data() {
    11. return {
    12. moves: [
    13. '金榜','热榜','人气榜'
    14. ],
    15. msg:'歌曲排行'
    16. };
    17. },
    18. };
    19. script>
    20. <style scoped>
    21. div {
    22. color: red;
    23. }
    24. .header{background-color: bisque;
    25. width: 200px;
    26. height: 300px;
    27. text-align: center;}
    28. style>

    效果:(使用相同的数据,不同的结构类型,通过作用域插槽实现父子组件通讯,父组件使用子组件数据,对子组件进行修改)

     

  • 相关阅读:
    vue3中实现elementPlus表格选中行的上移下移
    Mac系统,webots和pycharm联合仿真,配置问题解决方案!
    【Linux】Ubuntu存储分析
    我的Go gRPC之旅、01 初识gRPC,感受gRPC的强大魅力
    md5算法实现
    解决VUE报错GET http://127.0.0.1:5500/favicon.ico 404 (Not Found)
    动态分配内存
    PyCharm安装教程
    刷题分享—常见的经典面试题二
    C语言第十八弹---多个字符从两端移动向中间汇聚
  • 原文地址:https://blog.csdn.net/m0_71345904/article/details/126269942