Vue中的slot使用插槽分發(fā)內(nèi)容的方法
<slot></slot>標(biāo)簽,簡單來說就是占位符,它會幫你占好位置,等你需要的時候直接將html傳入,它會幫你顯示出來。
也有人說:props可以將數(shù)據(jù)從父組件傳入子組件,slot可以將html從父組件傳入子組件。那么如何實現(xiàn)呢?
單個插槽:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script type="text/javascript" src="vue.min.js"></script>
</head>
<body>
<div id="app">
<h1>我是父組件的標(biāo)題</h1>
<my-component>
<p>這是一些初始內(nèi)容</p>
<p>這是更多的初始內(nèi)容</p>
</my-component>
</div>
<script type="text/javascript">
Vue.component('my-component', {
// 有效,因為是在正確的作用域內(nèi)
template: '<div>\
<h2>我是子組件的標(biāo)題</h2>\
<slot>只有在沒有要分發(fā)的內(nèi)容時才會顯示。</slot>\
</div>',
data: function () {
return {
}
}
});
new Vue({
el:'#app',
data:{
msg:'你好啊'
}
})
</script>
</body>
</html>
組件中的模板中寫入slot標(biāo)簽,在父級調(diào)用子組件的時候傳入html即可。
具名插槽:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script type="text/javascript" src="vue.min.js"></script>
</head>
<body>
<div id="app">
<my-component>
<h1 slot="header">這里可能是一個頁面標(biāo)題</h1>
<p>主要內(nèi)容的一個段落。</p>
<p>另一個主要段落。</p>
<p slot="footer">這里有一些聯(lián)系信息</p>
</my-component>
</div>
<script type="text/javascript">
Vue.component('my-component', {
// 有效,因為是在正確的作用域內(nèi)
template: '<div class="container">\
<header>\
<slot name="header"></slot>\
</header>\
<main>\
<slot></slot>\
</main>\
<footer>\
<slot name="footer"></slot>\
</footer>\
</div>',
data: function () {
return {
}
}
});
new Vue({
el:'#app',
data:{
msg:'你好啊'
}
})
</script>
</body>
</html>
具名插槽,顧名思義當(dāng)有多個slot標(biāo)簽時,你需要給他們起個自己的名字,在父組件調(diào)用時需要slot="內(nèi)部的對應(yīng)名字",當(dāng)存在沒有命名的slot標(biāo)簽時,父級組件傳入的默認(rèn)html代碼將全部輸出在無名的slot標(biāo)簽中。
作用域插槽
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script type="text/javascript" src="vue.min.js"></script>
</head>
<body>
<div id="app">
<!-- 在父級中,具有特殊特性 slot-scope 的 <template> 元素必須存在,表示它是作用域插槽的模板。slot-scope 的值將被用作一個臨時變量名,此變量接收從子組件傳遞過來的 prop 對象: -->
<child>
<template scope="props">
<span>hello from parent</span><br>
<span>{{ props.text }}</span>
</template>
</child>
</div>
<script type="text/javascript">
// 在子組件中,只需將數(shù)據(jù)傳遞到插槽,就像你將 prop 傳遞給組件一樣:
Vue.component('child',{
template:'<ul>' +
'<slot text="hello from child"></slot>' +
'</ul>',
data:function(){
return {
}
},
});
new Vue({
el:'#app',
data:{
msg:'你好啊'
}
})
</script>
</body>
</html>
作用域插槽是一種特殊類型的插槽,用作一個 (能被傳遞數(shù)據(jù)的) 可重用模板,來代替已經(jīng)渲染好的元素。
其實就是相當(dāng)于,在父組件中可以獲取到子組件傳遞出來的props對象,從而渲染到父組件上。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
vue+element樹組件 實現(xiàn)樹懶加載的過程詳解
這篇文章主要介紹了vue+element樹組件 實現(xiàn)樹懶加載的過程,本文通過圖文實例代碼相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10
詳解el Cascader懶加載數(shù)據(jù)回顯示例
這篇文章主要為大家介紹了詳解el Cascader懶加載數(shù)據(jù)回顯示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11
基于Vue實現(xiàn)圖片在指定區(qū)域內(nèi)移動的思路詳解
這篇文章主要介紹了基于Vue實現(xiàn)圖片在指定區(qū)域內(nèi)移動,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下2018-11-11
尤雨溪開發(fā)vue?dev?server理解vite原理
這篇文章主要為大家介紹了尤雨溪開發(fā)的玩具vite,vue-dev-server來理解vite原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07

