在 Vue 中是使用插槽

栏目: JavaScript · 发布时间: 5年前

内容简介:先写一段简单的代码这种写法有两个问题:当我的子组件有一部分内容,是根据父组件传递过来的

属性传值

先写一段简单的代码

<div id="root">
    <child content="<p>Dell</p>"></child>
</div>
Vue.component('child', {
    props: {
        content:String
    },
    template: `<div>
                <p>hello</p>
                <div v-html="this.content"></div>
              </div>`,
})
let vm = new Vue({
    el: '#root'
})

这种写法有两个问题:

  1. p 标签外面会有一层 div ,这个 div 是无法去掉的,有人会想,能不能用 template 代替,其实是不可以的,在这里模版站位符是不能用的。
  2. 如果 content 传递的内容很多,代码就会变得很难阅读。

当我的子组件有一部分内容,是根据父组件传递过来的 dom 进行显示的话,这时候可以换一种语法。

插槽 slot

<div id="root">
    <child>
        <p>Dell</p>     //这种语法看起来非常像,用子组件,我向里插入内容
    </child>
</div>
Vue.component('child', {
    props: {
        content:String
    },
    template: `<div>
                <p>hello</p>
                <slot></slot>       //slot 标签显示的内容就是父组件向子组件插入进来的内容
              </div>`,
})
let vm = new Vue({
    el: '#root'
})

<p>Dell</p> 这种语法看起来非常像,用子组我向里插入内容,所以我们把它叫做插槽。

slot 标签显示的内容就是父组件向子组件插入进来的内容。

通过插槽可以更方便的向子组件传递 dom 元素,同时子组件只需通过 slot 来使用就可以了。

slot 其他功能

如果子组件里没有 dom 元素,可以让它显示默认内容,如下:

<slot>默认内容</slot>

具名插槽

如果现在有个需求是, headerfooter 是由外部引入的该怎么弄呢?如下

<div id="root">
    <body-content>
        <div class="header" slot="header">header</div>
        <div class="footer" slot="footer">footer</div>
    </body-content>
</div>
Vue.component('body-content', {
    props: {
        content:String
    },
    template: `<div>
                <slot name="header"></slot>
                <div class="content">content</p>
                <slot name="footer"></slot>
              </div>`,
})
let vm = new Vue({
    el: '#root'
})

slot 标签 name 属性对应的是组件中 slot 属性,通过这种写法,可以在调用子组件时,一次性传递多个区域的 dom 结构,在子组件里通过具名插槽来分别使用不同部分的 dom 结构


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

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

创造突破性产品

创造突破性产品

Jonathan Cagan、Craig M.Vogel / 机械工业出版社 / 2004-1 / 35.00元

在《创造突破性产品:从产品策略到项目定案的创新》中作者总结多年的研究成果,指明了与产品创新相关的一系列因素,并提供了一套全新的开发突破性产品的理论与方法,该书旨在帮助企业,技术和设计人员: 获得对用户的需求和市场新的趋势的准确洞察力; 认识可以创造新市场的产品机会缺口; 指导产品模糊前期的构造; 正确地运用定性和定量的研究方法; ......一起来看看 《创造突破性产品》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

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

HEX CMYK 互转工具