vue插槽学习总结

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

内容简介: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插槽学习总结


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

查看所有标签

猜你喜欢:

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

他们以为自己很厉害:12个企业管理陷阱

他们以为自己很厉害:12个企业管理陷阱

[法] 克里斯蒂娜•凯德朗 / 王倩 / 人民邮电出版社 / 2018-11 / 69.00元

本书讲述了震惊世界的150个企业管理失败案例,并从产品与服务定位、技术 创新、广告与营销策略、跨文化发展、融资战略到企业文化与员工管理等众多角度, 揭露了商场各种败局的内幕。作者以风趣的笔触讲述了国际知名企业和商界精英们 的惨痛教训,又以专业角度解读了这些失利背后的经济学和管理学因素,给读者带 来了启示。一起来看看 《他们以为自己很厉害:12个企业管理陷阱》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具