最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

vue+slot分發(fā)內(nèi)容

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 19:39:04
文檔

vue+slot分發(fā)內(nèi)容

vue+slot分發(fā)內(nèi)容:這次給大家?guī)?lái)vue+slot分發(fā)內(nèi)容,vue+slot分發(fā)內(nèi)容的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來(lái)看一下。一、什么是slot在使用組件時(shí),我們常常要像這樣組合它們:<app> <app-header></app-header> <app-foo
推薦度:
導(dǎo)讀vue+slot分發(fā)內(nèi)容:這次給大家?guī)?lái)vue+slot分發(fā)內(nèi)容,vue+slot分發(fā)內(nèi)容的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來(lái)看一下。一、什么是slot在使用組件時(shí),我們常常要像這樣組合它們:<app> <app-header></app-header> <app-foo
這次給大家?guī)?lái)vue+slot分發(fā)內(nèi)容,vue+slot分發(fā)內(nèi)容的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來(lái)看一下。

一、什么是slot

在使用組件時(shí),我們常常要像這樣組合它們:

<app>
 <app-header></app-header>
 <app-footer></app-footer>
</app>

當(dāng)需要讓組件組合使用,混合父組件的內(nèi)容與子組件的模板時(shí),就會(huì)用到slot , 這個(gè)過(guò)程叫作內(nèi)容分發(fā)( transclusion )。

注意兩點(diǎn):

1.< app>組件不知道它的掛載點(diǎn)會(huì)有什么內(nèi)容。掛載點(diǎn)的內(nèi)容是由<app >的父組件決定的。

2.<app> 組件很可能有它自己的模板。

props 傳遞數(shù)據(jù)、events 觸發(fā)事件和slot 內(nèi)容分發(fā)就構(gòu)成了Vue 組件的3 個(gè)API 來(lái)源,再?gòu)?fù)雜的組件也是由這3 部分構(gòu)成的。

二、作用域

<child-component>
 {{ message }}
</child-component>

這里的message 就是一個(gè)slot ,但是它綁定的是父組件的數(shù)據(jù),而不是組件<child-component>的數(shù)據(jù)。

父組件模板的內(nèi)容是在父組件作用域內(nèi)編譯,子組件模板的內(nèi)容是在子組件作用域內(nèi)編譯。如:

 <p id="app15">
 <child-component v-show="showChild"></child-component>
 </p>
Vue.component('child-component',{
 template: '<p>子組件</p>'
});
var app15 = new Vue({
 el: '#app15',
 data: {
 showChild: true
 }
});

這里的狀態(tài)showChild 綁定的是父組件的數(shù)據(jù),如果想在子組件上綁定,那應(yīng)該是:

 <p id="app15">
 <child-component></child-component>
 </p>
Vue.component('child-component',{
 template: '<p v-show="showChild">子組件</p>',
 data: function(){
 return {
 showChild: true
 }
 }
});

因此, slot 分發(fā)的內(nèi)容,作用域是在父組件上的。

三、slot用法

3.1 單個(gè)slot

在子組件內(nèi)使用特殊的<slot>元素就可以為這個(gè)子組件開(kāi)啟一個(gè)slot(插槽),在父組件模板里,插入在子組件標(biāo)簽內(nèi)的所有內(nèi)容將替代子組件的<slot> 標(biāo)簽及它的內(nèi)容。

 <p id="app16">
 <my-component16>
 <p>分發(fā)的內(nèi)容</p>
 <p>更多分發(fā)的內(nèi)容</p>
 </my-component16>
 </p>
Vue.component('my-component16',{
 template: '<p>' +
 '<slot><p>如果父組件沒(méi)有插入內(nèi)容,我將作為默認(rèn)出現(xiàn)<</p></slot>' +    //預(yù)留的slot插槽
 '</p>'
});
var app16 = new Vue({
 el: '#app16'
});

渲染結(jié)果為:

<p id=”app16”>
 <p>
 <p>分發(fā)的內(nèi)容<p>
 <p>更多分發(fā)的內(nèi)容<p>
 </p>
</p>

子組件child-component 的模板內(nèi)定義了一個(gè)<slot>元素,并且用一個(gè)<p>作為默認(rèn)的內(nèi)容,在父組件沒(méi)有使用slot 時(shí),會(huì)渲染這段默認(rèn)的文本;如果寫(xiě)入了slot, 那就會(huì)替換整個(gè)<slot> 。

3.2具名slot

給<slot> 元素指定一個(gè)name 后可以分發(fā)多個(gè)內(nèi)容,具名Slot 可以與單個(gè)slot 共存。

 <p id="app17">
 <my-component17>
 <h3 slot="header">標(biāo)題</h3>
 <p>正文內(nèi)容</p>
 <p>更多正文內(nèi)容</p>
 <h3 slot="footer">底部信息</h3>
 </my-component17>
 </p>
Vue.component('my-component17',{
 template: '<p class="container">' +
  '<p class="header">' +
  '<slot name="header"></slot>' +
  '</p>' +
  '<p class="main">' +
  '<slot></slot>' +
  '</p>'+
  '<p class="footer">' +
  '<slot name="footer"></slot>' +
  '</p>'+
 '</p>'
});
var app17 = new Vue({
 el: '#app17'
});

渲染結(jié)果為:

 <p id="app17">
 <p class="container">
  <p class="header">
  <h3>標(biāo)題</h3></p>
  <p class="main"> 
  <p>正文內(nèi)容</p> 
  <p>更多正文內(nèi)容</p> 
  </p>
  <p class="footer">
  <h3>底部信息</h3>
  </p>
 </p>
 </p>

子組件內(nèi)聲明了3 個(gè)<s lot>元素,其中在<p class=” main >內(nèi)的<slot> 沒(méi)有使用name 特性,它將作為默認(rèn)slot 出現(xiàn),父組件沒(méi)有使用slot 特性的元素與內(nèi)容都將出現(xiàn)在這里。

如果沒(méi)有指定默認(rèn)的匿名slot ,父組件內(nèi)多余的內(nèi)容片段都將被拋棄。

四、作用域插槽

作用域插槽是一種特殊的slot ,使用一個(gè)可以復(fù)用的模板替換己渲染元素。

看一個(gè)例子:

 <p id="app18">
 <my-component18>
 <template scope="props">
  <p>來(lái)自父組件的內(nèi)容</p>
  <p>{{props.msg}}</p>
 </template>
 </my-component18>
 </p>
Vue.component('my-component18',{
 template: '<p class="container"><slot msg="來(lái)自子組件的內(nèi)容"></slot></p>'
});
var app18 = new Vue({
 el: '#app18'
});

觀察子組件的模板,在<slot>元素上有一個(gè)類(lèi)似props 傳遞數(shù)據(jù)給組件的寫(xiě)法msg=” xxx ”,將數(shù)據(jù)傳到了插槽。

父組件中使用了<template>元素,而且擁有一個(gè)scope=”props ”的特性,這里的props只是一個(gè)臨時(shí)變量,就像v-for= ” item in items 里面的item 一樣,template 內(nèi)可以通過(guò)臨時(shí)變量props訪問(wèn)來(lái)自子組件插槽的數(shù)據(jù)msg 。

下面看下Vue組件中slot的用法

主要是讓組件的可擴(kuò)展性更強(qiáng)。

1. 使用匿名slot

2. 給slot加個(gè)名字

如果不在有slot的組件里加入任何標(biāo)簽,slot什么都不會(huì)顯示的。

相信看了本文案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注Gxl網(wǎng)其它相關(guān)文章!

推薦閱讀:

在案例中使用vue2.0+boostrap

node+token做出用戶(hù)驗(yàn)證

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

vue+slot分發(fā)內(nèi)容

vue+slot分發(fā)內(nèi)容:這次給大家?guī)?lái)vue+slot分發(fā)內(nèi)容,vue+slot分發(fā)內(nèi)容的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來(lái)看一下。一、什么是slot在使用組件時(shí),我們常常要像這樣組合它們:<app> <app-header></app-header> <app-foo
推薦度:
標(biāo)簽: 內(nèi)容 VUE slot
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top