使用slots进行内容分发

有时你想要构建一个可以用来放置其他组件的组件。你可能想要建立一个通用的模式对话框组件,让你的用户编写对话框的文本。或者你想在一个组件中使用通用的布局,内容使用其他的元素进行填充。Slots就是这样一种方式:在一个组件中有个固定的结构,将组件中指定的部分的内容委托给其父组件。

How to do it

为了提高猫的士气,俄罗斯黑手党猫决定用一个web页面来展示本月最佳员工,并决定使用vue组件来完成此功能。

      他们聘请你为主要的开发人员帮助他们编写如下的组件:

Vue.component('framed', {
template: `<div class="frame">
<h3>Russian cat mafia
employee of the month</h3>
<slot>Nothing framed.</slot>
</div>`
});
      其中,slot标签标识占位符,在父类模板中,你将放置一些内容在里面。当然我们可以先给这个组件添加点样式:

.frame {
border: 5px dashed dodgerblue;
width: 300px;
}
h3 {
font-family: sans-serif;
text-align: center;
padding: 2px 0;
width: 100%;
}
      HTML:

<div id="app">
<framed>
<cat :name="catName"></cat>
</framed>
</div>
      请注意如何在frame组件中放置另外一个组件。其中cat组件如下所示:

Vue.component('cat', {
template: `<div>
<figure>
<img src="http://lorempixel.com/220/220/cats/"/>
<figcaption>{{name}}</figcaption>
</figure>
</div>`,
props: ['name']
});
      每当有一个页面请求时,将随机加载一张宽为220px、高220px的猫的图像。
      给figcaption添加样式:

h3, figcaption {
font-family: sans-serif;
text-align: center;
padding: 2px 0;
width: 100%;
}
      Vue实例代码如下:

new Vue({
el: '#app',
data: {
names: ['Murzik', 'Pushok', 'Barsik', 'Vaska', 'Matroskin']
},
computed: {
catName () {
return this.names[Math.floor(Math.random() *
this.names.length)]
}
}
})
      启动应用,你将会发现本月最佳员工:



本文翻译来自:Vue.js Codebook

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值