在 Vue 中是使用插槽
栏目: JavaScript · 发布时间: 6年前
内容简介:先写一段简单的代码这种写法有两个问题:当我的子组件有一部分内容,是根据父组件传递过来的
属性传值
先写一段简单的代码
<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'
})
这种写法有两个问题:
-
p标签外面会有一层div,这个div是无法去掉的,有人会想,能不能用template代替,其实是不可以的,在这里模版站位符是不能用的。 -
如果
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>
具名插槽
如果现在有个需求是, header
和 footer
是由外部引入的该怎么弄呢?如下
<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
结构
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- RecyclerView使用指南(一)—— 基本使用
- 如何使用Meteorjs使用URL参数
- 使用 defer 还是不使用 defer?
- 使用 Typescript 加强 Vuex 使用体验
- [译] 何时使用 Rust?何时使用 Go?
- UDP协议的正确使用场合(谨慎使用)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
微信小程序运营与推广完全自学手册
王洪波 / 电子工业出版社 / 2018-6 / 59
本书是运营管理方面的书籍,将小程序的运营推广问题置千小程序的整个运营管理体系中来谈,主要讲述小程序的定位规划、营销吸粉策略、评估优化这三大方面的内容,这三方面的内容之间是三位一体、密切相关的。 书中通过列举丰富且具有代表性的小程序实际案例来向读者提供些可行的运营推广办法。案例涉及美食类、电商类、旅游类、媒体类等小程序,可供多个行业的小程序运营者参考借鉴。 书中所提供的各种小程序营销策略......一起来看看 《微信小程序运营与推广完全自学手册》 这本书的介绍吧!