• 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>

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

     

  • 相关阅读:
    精灵球Plus相关链接
    C#基础学习笔记
    go语言学习之旅之Go语言基础语法二
    Java开发学习(二十五)----使用PostMan完成不同类型参数传递
    AGI STK EOIR对地精细成像
    记录第一个启动代码的诞生
    java计算机毕业设计高校贫困生信息管理系统源码+mysql数据库+系统+lw文档+部署
    一看就会的Chromedriver(谷歌浏览器驱动)安装教程
    Docker安装和基本配置
    Spring Security(3)
  • 原文地址:https://blog.csdn.net/m0_71345904/article/details/126269942