• 记一下Slot的使用



    1、组件中有单个或多个未命名slot标签时,如下:

    <Child><span style=”color:red;”>hello world</span></Child>   
    

      

    <template>    
    
          <div>
    
                <slot></slot>
    
                <slot  style=”color:blue;” >这是在slot上添加了样式</slot>
    
                <slot  name=”mySlot”>这是拥有命名的slot的默认内容</slot>
    
          </div>
    
    </template> 
    

      

    会输出:两个红色的hello world,以及一个使用slot的默认内容

     hello world

     hello world

     这是拥有命名的slot的默认内容

    注意:在slot标签添加样式无效。拥有命名的插槽不能被不含slot属性的标签内容替换,会显示slot的默认值(具名slot具有对应性);


    2、组件中有多个命名的slot插槽时,可以实现父组件对子组件的指定位置显示内容或传参,如下:

    <Child>

    <span slot="header">hello world</span>

    <span slot="main">hello world</span>

    <span slot="footer">hello world</span>

    <span slot="other">{{otherData}}</span>

    </Child>

    <template>

    <div>

    <slot  name=”header”>这是拥有命名的slot的默认内容</slot>

    <slot  name=”main”>这是拥有命名的slot的默认内容</slot>

    <slot  name=”footer”>这是拥有命名的slot的默认内容</slot>

    <slot  name=”other”>这是拥有命名的slot的默认内容</slot>

    </div>

    </template>

    3、作用域插槽:
    使用时候子组件标签<Child>中要有<template scope=”scopeName”>标签,再通过scopeName.childProp就可以调用子组件模板中的childProp绑定的数据,所以作用域插槽是一种子传父传参的方式,解决了普通slot在parent中无法访问child数据的去问题;

    作用域插槽代表性的用例是列表组件,允许在parent父组件上对列表项进行自定义显示,如下该items的所有列表项都可以通过slot定义后传递给父组件使用,也就是说数据是相同的,不同的场景页面可以有不同的展示方式:

       <ul>

          <slot name="item" v-for="item in items" :text="item.text" :myname="item.myname" >

             slot的默认内容

          </slot>

       </ul>

       <Child>

          <template slot="item" scope="props">

            <li>{{props.myname}}</li>

          </template>

       </Child>

    4、slot插槽使用注意:

    slot可以包含任何模板代码,包括 HTML、字符文档、甚至组件

    但是如果子组件内没有使用slot,任何传入它的内容都会被抛弃。

    插槽显示顺序会和子组件中的命名顺序一致,父组件中需要显示的数据会根据name命名寻找对应的位置,

    eg:

    <template>
         <div id="app">
            <test-slot>
               <div slot="first">
                   <span>1</span>
                   <span>第一个</span>
                </div> 
                <div>
                    <span>默认slot</span>
                </div>
                <div slot="second">
                    <span>2</span>
                    <span>第二个</span>
                </div> 
            </test-slot>
        </div> 
    </template>
    
    <script>
    import testSlot from './components/testSlot'
    export default {
      data(){
        return {
        }
      },
      components:{
        testSlot
      }
    }
    </script>                                    

    子组件testSlot.vue

     1 <template>
     2     <div class="testSlot">
     3         <div>
     4             <slot></slot><slot></slot> 
     5         </div>
     6         <div class="test-second">
     7             <slot name="second"></slot> 
     8         </div>
     9         <div class="test-first">
    10             <slot name="first"></slot> 
    11         </div>
    12     </div> 
    13 </template>
    14 
    15 <script>
    16 export default { 
    17 data(){
    18 return {
    19 
    20 }
    21 }
    22 }
    23 </script>

    输出会是:

    默认slot

    默认slot

    2 第二个

    1 第一个

  • 相关阅读:
    nginx日志格式字段
    set_include_path和get_include_path用法详解
    nginx try_files 详解
    ul ol li的序号编号样式
    PHP中报500错误时如何查看错误信息
    nginx的access.log文件详解
    一些常用服务命令和配置目录
    PHP 使用 Redis
    HTML5-indexedDB使用常见错误总结
    浏览器数据库 IndexedDB 入门
  • 原文地址:https://www.cnblogs.com/jswzy/p/10159633.html
Copyright © 2020-2023  润新知