vue插槽学习总结

栏目: 编程语言 · 发布时间: 5年前

内容简介:Vue实现了一套内容分发的API,将具名插槽比较简单,通过阅读官网就可以得到很好的理解,不过作用域插槽可能会有理解上的困难,我这里分别写了具名插槽和作用域插槽的demo,有助于大家的理解。利用了

插槽

Vue实现了一套内容分发的API,将 <slot> 元素作为承载分发内容的出口。插槽内可以包含任何模板代码,包含HTML。插槽就是子组件提供的可替换模板,父组件可以根据需求改变模板的内容。

具名插槽比较简单,通过阅读官网就可以得到很好的理解,不过作用域插槽可能会有理解上的困难,我这里分别写了具名插槽和作用域插槽的demo,有助于大家的理解。

具名插槽

利用了 <slot> 的name属性,利用这个属性可以用来定义额外的插槽,一个不带 name<slot> 出口会带有隐含的名字“default”

在向具名插槽提供内容的收可以在 <template> 上的 v-slot 指令,然后 <template> 中的所有内容会被传入到相应的插槽中,任何没有被包裹在带有 v-slot<template> 中的内容都会被视为默认插槽的内容

子组件中的 <slot name='aa'></slot> 和父组件中的 <template v-slot:aa></template> 相对应

注意: v-slot 只能添加到 <template> 标签上, v-slot 的简写形式 # ,例如 v-slot:header 等价于 #header

DEMO

app.vue

<template>
  <div id="app">
       <slotChild>
            {{this.syncShow}}
            <template v-slot:footer>
                <p>这里是footer</p>
            </template>
            <template v-slot:head>
                <p>这里是head</p>
            </template>
        </slotChild>
  </div>
</template>
<script>
import slotChild from '@components/slot-child.vue'
export default {
    name: 'app',
    data () {
        return {
            syncShow:false
        }
    }
}
</script>

slot-child.vue

<template>
    <div>
        这里是slot-child组件
        <br>
        <slot></slot>
        <slot name="head"></slot>
        <slot name="footer"></slot>
    </div>
</template>
<script>
export default {
    name: 'slotChild',
    data () {
        return {}
    }
}
</script>

作用域插槽

作用域插槽提供了一种新玩法,“插槽prop”(demo中会更直观的介绍),通过“插槽prop”,父组件可以接收到子组件的数据,并且可以对数据进行操作,展现成父组件想要实现的样子。

插槽 prop允许我们将插槽转换为可复用的模板,这些模板可以基于输入的 prop 渲染出不同的内容。这在设计封装数据逻辑同时允许父级组件自定义部分布局的可复用组件时是最有用的

DEMO

app.vue

<template>
<slotChild :slotList='slotList'>
    <template v-slot:slot-scope="item">
    <!-- 这里的`v-slot`指向的是name='slot-scope'的`<slot>`,通过item可以接收到子组件的返回值,这个值是自定义的,被称为插槽prop -->
        <li>书名:<span style="color: red">《{{item.title}}》</span> 作者:<span style='color: green'>{{item.name}}</span></li>
        <!-- 接收到子组件的返回值item,这里父组件重新对数据进行排版以满足自己的需求,从而提高组件的复用程度 -->
    </template>
</slotChild>
</template>
<script>
import slotChild from '@components/slot-child.vue'
export default {
    name: 'app',
    data () {
        return {
            slotList: [
                {
                  title: '围城',
                  name: '钱钟书'
                },
                 {
                  title: '追风筝的人',
                  name: '卡勒德·胡赛尼'
                },
                 {
                  title: '灿烂千阳',
                  name: '卡勒德·胡赛尼'
                }
            ]
        }
    }
</script>
}

slot-child.vue

<template>
    <div>
        <ul>
            <slot name="slot-scope" v-for="item in slotList" v-bind="item">
                <li>书名:《{{item.title}}》; 作者:{{item.name}}</li>
            </slot>
        </ul>
    </div>
</template>
<script>
export default {
    name: 'slotChild',
    props:{
        slotList: {
          type: Array,
          default: () => []
        }
    },
    data () {
        return {}
    }
}
</script>

最终效果

vue插槽学习总结


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

群体的智慧

群体的智慧

[美] 詹姆斯·索罗维基 / 王宝泉 / 中信出版社 / 2010-10 / 33.00元

《纽约时报》榜首畅销书,《商业周刊》《福布斯》杂志最佳商业图书 21世纪商务人士必读书,了解群体智慧时代的决策模式 告诉我们如何过日子、如何选择领导人、如何做生意以及如何思考这个世界 我们当中的大多数人,不论是选民还是投资者,是客户还是经理人,似乎都相信宝贵的知识掌握在少数人手中,认为精英们做出的决策更加聪明,很少有人相信“乌合之众”也能像专家那样做得如此出色。 但《纽约客......一起来看看 《群体的智慧》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码