Vue官網:Vue 實現了一套內容分發的 API,將<slot>
元素做爲承載分發內容的出口。 我的理解:插槽就是將定義在父組件內的內容分配到子組件上。css
初始實例文件(使用的是html,複製便可執行)html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>v-slot</title>
<style>
body{
text-align: center;
line-height: 100px;
padding: 0;
margin: 0;
}
</style>
</head>
<body>
<div id="app">
<!-- 父組件A -->
<v-compa>
{{msg}}
</v-compa>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
<script>
//子組件
let CompA = {
template: "<div><slot></slot></div>",
data() {
return {
msgA: 1
}
}
};
//Vue實例
new Vue({
el: "#app",
data: {
msg: "vue實例"
},
components: {
'v-compa': CompA
}
});
</script>
</body>
</html>
複製代碼
打開瀏覽器咱們能夠看到vue實例的字樣,該字樣就是從父組件中的內容分發到子組件之中。若是去除子組件中的<slot>
標籤頁面就會一片空白,便是子組件渲染時把父組件上的內容也一塊兒渲染了。vue
//子組件
let CompA = {
template: "<div></div>", //去除<slot></slot>
data() {
return {
msgA: 1
}
}
};
複製代碼
具名插槽就是至關於key和value同樣,父組件的標籤上要定義v-slot:default
屬性(v-slot
只能寫在父組件的標籤上),子組件的<slot name="default"></slot>
。瀏覽器
//父組件bash
<div id="app">
<!-- 父組件A -->
<v-compa v-slot:default>
{{msg}}
</v-compa>
</div>
複製代碼
//子組件app
//子組件
let CompA = {
template: "<div><slot name='default'></slot></div>",
data() {
return {
msgA: 1
}
}
};
複製代碼
若是不寫v-slot:default
,那麼默認就是v-slot:default
,default
可已改成別的,好比:v-slot:header
,那麼<slot name='header'></slot>
,一一對應的。ui
做用於插槽主要是父組件接受子組件slot
標籤上的信息。 //父組件spa
<div id="app">
<!-- 父組件A -->
<v-compa v-slot:default='props'>
{{props.msg}}
</v-compa>
</div>
複製代碼
//子組件code
//子組件A
let CompA = {
template: "<div><slot name='default' :msg='msgA'></slot></div>",
data() {
return {
msgA: 1
}
}
};
複製代碼
//瀏覽器(顯示組件A的msgA的值)component
這裏的做用域插槽跟父子組件之間的通信很像,子組件中經過<slot :msg='msgA'>
中的msg來保存子組件中的信息。父組件中經過v-slot:default='props'
中的props來保存子組件傳過來的msg。props是一個的對象,不必定是以props命名。
本次的筆記很簡單,只是介紹了vue中的v-slot簡單使用,並無作太多的深刻了解,其實在網上看了不少,都是按照官方的說法來寫,因此沒能好好理解。 最總的實例文件:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>v-slot</title>
<style>
body {
text-align: center;
line-height: 100px;
padding: 0;
margin: 0;
}
</style>
</head>
<body>
<div id="app">
<!-- 父組件A -->
<v-compa v-slot:default='props'>
{{props.msg}}
</v-compa>
</div>
<script src="https://cdn.bootcss.com/vue/2.6.10/vue.min.js"></script>
<script>
//子組件A
let CompA = {
template: "<div><slot name='default' :msg='msgA'></slot></div>",
data() {
return {
msgA: 1
}
}
};
//Vue實例
new Vue({
el: "#app",
data: {
A: "組件A",
},
components: {
'v-compa': CompA
}
});
</script>
</body>
</html>
複製代碼