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的默认内容

扫描二维码关注公众号,回复: 4599806 查看本文章

注意:在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 第一个

猜你喜欢

转载自www.cnblogs.com/jswzy/p/10159633.html