插槽这个东西还是很重要的。我们都学习过 html 的 列表吧
。
<ul>
<li>li>
ul>
其实插槽 就类似于 这里面的 。就是 相当于 标签下面的子标签。而我们 插槽 就可以实现这个东西。又因为 是 Vue 写的,所以比原生态的 强大很多。
我们知道,在 Vue 里面,只有 组件的概念,没有标签的概念。
所以 我们 要 新建 一个 自定义组件
\
反斜杠 在 template 的字符串值里面 代表着 回车换行!
Vue.component("mqy",{
template: '\ \
'
})
- 1
- 2
- 3
- 建立 那两个插槽 应该插入的 子组件。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>插槽 slot 的应用title>
head>
<body>
<div id="vue">
<mqy>
mqy>
div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
<script>
Vue.component("mqy",{
template: '\ \
'
});
Vue.component("mqy-title",{
props: ['value'],
template: '{{value}}'
});
Vue.component("mqy-item",{
props: ['value'],
template: '- {{value}}
'
});
script>
body>
html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- slot 的使用方法
<div id="vue">
<mqy>
<mqy-title slot="mqy-title" v-bind:value="title">mqy-title>
<mqy-item v-for="item in arr" slot="mqy-item" v-bind:value="item">mqy-item>
mqy>
div>
- 1
- 2
- 3
- 4
- 5
- 6
slot="name名字"
意思是 往 父组件的 哪个插槽 的地方 去插入!
- data 里面 写 绑定的 数据
let vm = new Vue({
el: "#vue",
data: {
title: "标题",
arr: ["Java","前端","linux"]
}
})
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 成品
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>插槽 slot 的应用title>
head>
<body>
<div id="vue">
<mqy>
<mqy-title slot="mqy-title" v-bind:value="title">mqy-title>
<mqy-item v-for="item in arr" slot="mqy-item" v-bind:value="item">mqy-item>
mqy>
div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
<script>
Vue.component("mqy",{
template: '\ \
'
});
Vue.component("mqy-title",{
props: ['value'],
template: '{{value}}'
});
Vue.component("mqy-item",{
props: ['value'],
template: '- {{value}}
'
});
let vm = new Vue({
el: "#vue",
data: {
title: "标题",
arr: ["Java","前端","linux"]
}
})
script>
body>
html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
微信小程序的 框架,很多的组件,就用到了 插槽。就是 一个组件里面 可能 还有 子组件。比如说 scroll 组件,里面就有 scroll-item 组件。
直接从 slot 里面 拿到 组件标签之间的 text 部分
有的人 肯定会觉得 这样子 好麻烦呀,我就是想 给这个 组件设定一个 数据 为毛 还要什么 数据绑定??难道不能直接 是一个 静态数据吗?比如 说 在 数据内容
组件标签之间拿到 这个数据!
答案是:可以的!
this.$slots.default[0].text
就可以拿到组件标签之间的那个内容。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>插槽 slot 的应用title>
head>
<body>
<div id="vue">
<mqy>
<mqy-title slot="mqy-title" v-bind:value="title">Fuck!mqy-title>
<mqy-item v-for="item in arr" slot="mqy-item" v-bind:value="item">mqy-item>
mqy>
div>
<script src="https://cdn.bootcdn.net/ajax/libs/vue/2.6.13/vue.js">script>
<script>
Vue.component("mqy",{
template: '\ \
'
});
Vue.component("mqy-title",{
props: ['value'],
template: '{{this.$slots.default[0].text}}'
});
Vue.component("mqy-item",{
props: ['value'],
template: '- {{value}}
'
});
let vm = new Vue({
el: "#vue",
data: {
title: "标题",
arr: ["Java","前端","linux"]
}
})
script>
body>
html>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44