• vue


    描述:插槽,也就是slot,是组件的一块HTML模板,一个slot最核心的两个问题是显示不显示和怎样显示

    插槽分类:

    1.1 单个插槽(单个插槽,别名默认插槽、匿名插槽,不用设置name属性)

    1.2 具名slot(插槽加了name属性,就变成了具名插槽。具名插槽可以在一个组件中出现N次,出现在不同的位置)

    1.3 作用域slot(vue2.5版本中slot-scope取代了scope,来实现作用域插槽,主要用在组件调用中,具体在template标签上面使用slot-scope来获取插槽slot上面的属性值,获取值的为一个对象,slot-scope=”它可以取任意字符串”,在element-ui的组件中经常看到)

    <!-- 单个插槽-->
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <children1>
                <span>12345</span>
            </children1>
        </div>
    
        <script type="text/javascript">
            var app = new Vue({
                el: '#app',
                components: {
                    children1: {
                        template: "<button><slot></slot>单个插槽</button>"
                    }
                }
            });
        </script>
    </body>
    
    </html>
     1 <!-- 具名插槽 -->
     2 <!DOCTYPE html>
     3 <html lang="en">
     4 
     5 <head>
     6     <meta charset="UTF-8">
     7     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     8     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     9     <title>Document</title>
    10     <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    11 </head>
    12 
    13 <body>
    14     <div id="app">
    15         <children2>
    16             <span slot="first" @click="tobeknow">12345</span>
    17             <span slot="second">56789</span>
    18         </children2>
    19     </div>
    20 
    21     <script type="text/javascript">
    22         var app = new Vue({
    23             el: '#app',
    24             methods: {
    25                 tobeknow: function () {
    26                     console.log("It is the parent's method");
    27                 }
    28             },
    29             components: {
    30                 children2: {//这个无返回值,不会继续派发  
    31                     template: "<button><slot name='first'></slot>具名插槽,<slot name='second'></slot></button>"
    32                 }
    33             }
    34         });
    35     </script>
    36 </body>
    37 
    38 </html>
     1 <!-- 作用域插槽 -->
     2 <!DOCTYPE html>
     3 <html lang="en">
     4 
     5 <head>
     6     <meta charset="UTF-8">
     7     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     8     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     9     <title>Document</title>
    10     <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    11 </head>
    12 
    13 <body>
    14     <div id="app">
    15         <!-- 将数据传递给组件 -->
    16         <tb-list :data="data">
    17             <!-- 获取slot上面的值 -->
    18             <template slot-scope="scope">
    19                 <p>索引:{{JSON.stringify(scope)}}</p>
    20                 <p>索引:{{scope.$index}}</p>
    21                 <p>姓名:{{scope.row.name}}</p>
    22                 <p>年龄: {{scope.row.age}}</p>
    23                 <p>性别: {{scope.row.sex}}</p>
    24             </template>
    25         </tb-list>
    26     </div>
    27 
    28     <script type="text/javascript">
    29         var app = new Vue({
    30             el: '#app',
    31             data: {
    32                 data: [{
    33                     name: 'kongzhi1',
    34                     age: '29',
    35                     sex: 'man'
    36                 }]
    37             },
    38             components: {
    39                 // 作用域slot
    40                 'tb-list': {
    41                     template:
    42                         `<ul>
    43                             <li v-for="(item, index) in data">
    44                                 <slot :row="item" :$index="index"></slot>
    45                             </li>
    46                         </ul>`,
    47                     // 获取值
    48                     props: ['data']
    49                 }
    50             }
    51         });
    52     </script>
    53 </body>
    54 
    55 </html>
  • 相关阅读:
    软件系统架构演变
    PL/SQL语法
    ambari安装指南
    手把手带你使用JS-SDK自定义微信分享效果
    微信公众平台无法使用支付宝收付款的解决方案
    php创建含文件夹的zip文件
    捣鼓TinyMCE 粘贴图片并上传+Django后台
    捣鼓TinyMCE粘贴图片并上传+Flask后台
    关于Java 中Integer 和Long对象 对比的陷阱(简单却容易犯的错误)
    Java东西太多,记录一些知识点
  • 原文地址:https://www.cnblogs.com/cisum/p/9618346.html
Copyright © 2020-2023  润新知