• vue 插槽slot的理解和使用方法


    参考 https://segmentfault.com/a/1190000012996217?utm_source=tag-newest

    一、前言

    Vue的slot插槽,简单理解就是,在子组件内占坑,在父组件里填坑。

    二、slot的作用
    Q: 假如父组件需要在子组件内放一些DOM元素,那么这些DOM是显示呢还是不显示呢?

    默认情况下是不会显示的,如下图所示,页面并没有显示父组件增加的

    元素内容。那么我执意要加DOM元素到子组件上该怎么实现呢?这就用到了slot插槽,使用slot这个标签可以将父组件放在子组件的内容,放到它想显示的地方

    //错误写法:如果不用插槽形式,子组件的 div等内容是不会显示的。
    <template>
      <div class="parent">
        <Child>
          <p>这里的文字不显示的。。。</p>
        </Child>
        <div class="now">1234567/98</div>
      </div>
    </template>
    
    三、个人理解及插槽的使用场景

    一个复用的组件在不同的地方也些许变化,如果去重写子组件是很不明智的一件事,当然也可以将不同之处都写在子组件里,然后通过父组件传来的标识进行选择显示。
    其实质是对子组件的扩展,通过slot插槽向组件内部指定位置传递内容,即将元素作为承载分发内容的出口;

    具名插槽
    //子组件  Child.vue
    <template>
        <div class="child">
            <slot name='header'></slot>
            child内容
            <slot name='footer'></slot>
        </div>
    </template>
    

    在子组件里,用占位,并用name来区分。此处的name相当于类名class。

    //父组件  parent.vue
    <template>
      <div class="parent">
        <Child>
          <h1 slot="header" class="h1">header</h1>
          <h1 slot="footer" class="h1">footer</h1>
        </Child>
        <div class="now">1234567/98</div>
      </div>
    </template>
    

    在父组件里,引入了子组件, 在子组件中,可以插入div等标签,定义上对应的slot=“name”属性,来使用。

    总结:slot插槽让我们在原有模版的基础上,定制更加多样化的组件。
    四、父子组件通信----解构slot-scope
    //子组件 child.vue
    <template>
        <div class="child">
            <slot name="header" :users="users"></slot>
            <slot name="footer" ></slot>
        </div>
    </template>
    <script>
    export default {
        data(){
            return {
                users: [
                {name: 'Jack', sex: 'boy'},
                {name: 'Jone', sex: 'girl'},
                {name: 'Tom', sex: 'boy'}
                ]
               
            }
        }
    }
    </script>
    

    在子组件中插槽中通过 :users绑定了数据。

    <template slot-scope="prop">
      <div id="app">
        <Child>
          <div slot="header" slot-scope="scope" >
            <span>{{scope.users}} </span>
          </div>
          <h1 slot="footer">footer</h1>
        </Child>
      </div>
    </template>
    

    父组件可以通过slot-scope="scope"来取得子组件作用域插槽 。 通过scope.users获取到所需数据。

  • 相关阅读:
    《剑指offer》第五十三题III:数组中数值和下标相等的元素
    《剑指offer》第五十三题II:0到n-1中缺失的数字
    《剑指offer》第五十三题I:数字在排序数组中出现的次数
    《剑指offer》第五十二题:两个链表的第一个公共结点
    《剑指offer》第五十一题:数组中的逆序对
    《剑指offer》第五十题II:字符流中第一个只出现一次的字符
    《剑指offer》第五十题I:字符串中第一个只出现一次的字符
    《剑指offer》第四十九题:丑数
    Processing做延迟动画的方法
    Processing中延长数组的方法
  • 原文地址:https://www.cnblogs.com/maizilili/p/12449777.html
Copyright © 2020-2023  润新知