這篇文章主要介紹了vue中如何使用slot分發(fā)內(nèi)容的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇vue中如何使用slot分發(fā)內(nèi)容文章都會有所收獲,下面我們一起來看看吧。
你所需要的網(wǎng)站建設(shè)服務,我們均能行業(yè)靠前的水平為你提供.標準是產(chǎn)品質(zhì)量的保證,主要從事成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、企業(yè)網(wǎng)站建設(shè)、移動網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、成都品牌網(wǎng)站建設(shè)、網(wǎng)頁制作、做網(wǎng)站、建網(wǎng)站。成都創(chuàng)新互聯(lián)擁有實力堅強的技術(shù)研發(fā)團隊及素養(yǎng)的視覺設(shè)計專才。
一、什么是slot
在使用組件時,我們常常要像這樣組合它們:
<app> <app-header></app-header> <app-footer></app-footer> </app>
當需要讓組件組合使用,混合父組件的內(nèi)容與子組件的模板時,就會用到slot , 這個過程叫作內(nèi)容分發(fā)( transclusion )。
注意兩點:
1.< app>組件不知道它的掛載點會有什么內(nèi)容。掛載點的內(nèi)容是由<app >的父組件決定的。
2.<app> 組件很可能有它自己的模板。
props 傳遞數(shù)據(jù)、events 觸發(fā)事件和slot 內(nèi)容分發(fā)就構(gòu)成了Vue 組件的3 個API 來源,再復雜的組件也是由這3 部分構(gòu)成的。
二、作用域
<child-component> {{ message }} </child-component>
這里的message 就是一個slot ,但是它綁定的是父組件的數(shù)據(jù),而不是組件<child-component>的數(shù)據(jù)。
父組件模板的內(nèi)容是在父組件作用域內(nèi)編譯,子組件模板的內(nèi)容是在子組件作用域內(nèi)編譯。如:
<div id="app15"> <child-component v-show="showChild"></child-component> </div> Vue.component('child-component',{ template: '<div>子組件</div>' }); var app15 = new Vue({ el: '#app15', data: { showChild: true } });
這里的狀態(tài)showChild 綁定的是父組件的數(shù)據(jù),如果想在子組件上綁定,那應該是:
<div id="app15"> <child-component></child-component> </div> Vue.component('child-component',{ template: '<div v-show="showChild">子組件</div>', data: function(){ return { showChild: true } } });
因此, slot 分發(fā)的內(nèi)容,作用域是在父組件上的。
三、slot用法
3.1 單個slot
在子組件內(nèi)使用特殊的<slot>元素就可以為這個子組件開啟一個slot(插槽),在父組件模板里,插入在子組件標簽內(nèi)的所有內(nèi)容將替代子組件的<slot> 標簽及它的內(nèi)容。
<div id="app16"> <my-component16> <p>分發(fā)的內(nèi)容</p> <p>更多分發(fā)的內(nèi)容</p> </my-component16> </div> Vue.component('my-component16',{ template: '<div>' + '<slot><p>如果父組件沒有插入內(nèi)容,我將作為默認出現(xiàn)<</p></slot>' + //預留的slot插槽 '</div>' }); var app16 = new Vue({ el: '#app16' });
渲染結(jié)果為:
<div id=”app16”> <div> <p>分發(fā)的內(nèi)容<p> <p>更多分發(fā)的內(nèi)容<p> </div> </div>
子組件child-component
的模板內(nèi)定義了一個<slot>元素,并且用一個<p>作為默認的內(nèi)容,在父組件沒有使用slot 時,會渲染這段默認的文本;如果寫入了slot, 那就會替換整個<slot> 。
3.2具名slot
給<slot> 元素指定一個name 后可以分發(fā)多個內(nèi)容,具名Slot 可以與單個slot 共存。
<div id="app17"> <my-component17> <h4 slot="header">標題</h4> <p>正文內(nèi)容</p> <p>更多正文內(nèi)容</p> <h4 slot="footer">底部信息</h4> </my-component17> </div> Vue.component('my-component17',{ template: '<div class="container">' + '<div class="header">' + '<slot name="header"></slot>' + '</div>' + '<div class="main">' + '<slot></slot>' + '</div>'+ '<div class="footer">' + '<slot name="footer"></slot>' + '</div>'+ '</div>' }); var app17 = new Vue({ el: '#app17' });
渲染結(jié)果為:
<div id="app17"> <div class="container"> <div class="header"> <h4>標題</h4></div> <div class="main"> <p>正文內(nèi)容</p> <p>更多正文內(nèi)容</p> </div> <div class="footer"> <h4>底部信息</h4> </div> </div> </div>
子組件內(nèi)聲明了3 個<s lot>元素,其中在<div class=” main >內(nèi)的<slot> 沒有使用name 特性,它將作為默認slot 出現(xiàn),父組件沒有使用slot 特性的元素與內(nèi)容都將出現(xiàn)在這里。
如果沒有指定默認的匿名slot ,父組件內(nèi)多余的內(nèi)容片段都將被拋棄。
四、作用域插槽
作用域插槽是一種特殊的slot ,使用一個可以復用的模板替換己渲染元素。
看一個例子:
<div id="app18"> <my-component18> <template scope="props"> <p>來自父組件的內(nèi)容</p> <p>{{props.msg}}</p> </template> </my-component18> </div> Vue.component('my-component18',{ template: '<div class="container"><slot msg="來自子組件的內(nèi)容"></slot></div>' }); var app18 = new Vue({ el: '#app18' });
觀察子組件的模板,在<slot>元素上有一個類似props 傳遞數(shù)據(jù)給組件的寫法msg=” xxx ”,將數(shù)據(jù)傳到了插槽。
父組件中使用了<template>元素,而且擁有一個scope=”props ”
的特性,這里的props只是一個臨時變量,就像v-for= ” item in items
里面的item 一樣,template 內(nèi)可以通過臨時變量props訪問來自子組件插槽的數(shù)據(jù)msg 。
下面看下Vue組件中slot的用法
主要是讓組件的可擴展性更強。
1. 使用匿名slot
2. 給slot加個名字
關(guān)于“vue中如何使用slot分發(fā)內(nèi)容”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“vue中如何使用slot分發(fā)內(nèi)容”知識都有一定的了解,大家如果還想學習更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
文章名稱:vue中如何使用slot分發(fā)內(nèi)容
標題鏈接:http://jinyejixie.com/article8/jjhgip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務器托管、網(wǎng)站內(nèi)鏈、網(wǎng)站設(shè)計、域名注冊、網(wǎng)站策劃、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)