Element-ui 的 slot 关系理解

摘要: 在看一些前端用例时,看到 slot-scope 属性,早在了解学习的时候,对 slot 还是可以理解的,结果碰上 slot-scope 感觉理解方式就不对了,所以重新查阅学习了一下

首先 slot: 父组件写在子组件标签内的内容,替换了子组件中slot标签

 1 //father
 2 <template>
 3   <div class="father">
 4     <child>
 5       <div>标签内的内容</div>      //写在子组件标签内,会替换子组件的slot标签.....这里可以是纯文字,可以是一个小标签,也可以是一个<template>
 6     </child>
 7   </div>
 8 <template>
 9 
10 //child
11 <template>
12   <div class="child">
13     <slot></slot>      //插槽,子组件预留的空位,由父组件提供内容        
14   </div>
15 <template>
16 
17 //合成后
18 <div class="father">  //父组件
19   <div class="child">  //子组件
20     <div>标签内的内容</div>   //替换了slot
21   </div>
22 </div>

上述内容就是插槽,一种子组件预留空间的方法.也可以准备多个插槽:

//指定要插入的插槽
<div slot="slot1">标签内的内容1</div>
<div slot="slot2">标签内的内容2</div>

//为插槽命名
<slot name="slot1"></slot>
<slot name="slot2"></slot>

slot-scope 相对复杂一点,它是用于数据传递的,意义上就像props

先提供一个场景说明:

老师A需要做一个调查统计分析的报告(A:父组件,报告:展示部分)

留了一页空白让学生B去做表格和统计了(B:子组件,表格统计:展示部分)

要求,在表格最后一行留空,A要写分析结论(留空:插槽,分析结论:标签内的内容)

同时,A还要B提供统计结果才能写结论(统计结果:子组件返回的数据)

//父组件
<template>
  <div class="father">          //老师A 报告
    <child>                      //学生B 表格
        <div slot-scope="response" > //老师A 结论
          统计结果:{{response.data}}
        </div>
    </child>
  </div>
</template>

//子组件
<template>
  <div class="child">          //学生B 表格
     <slot :data="result"></slot>   //老师A 结论
  </div>
</template>

解释;把slot想象成孙组件,子组件可以任意传数据给孙组件

这里孙组件不用再一一写props,因为子组件slot会把后面所有数据打包成一个对象给孙组件,孙组件用slot-scope为这整个对象起名

<div slot-scope="xxx">
{{xxx.info.name}}的学校是{{xxx.school.name}}
</div>

<slot :info="person" :school="school"></slot>
posted @ 2019-09-26 16:27  新手之小龙  阅读(7843)  评论(2编辑  收藏  举报