最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vuejs第十一篇組件之slot內(nèi)容分發(fā)實例詳解

 更新時間:2016年09月09日 09:30:44   投稿:mrr  
這篇文章主要介紹了Vuejs第十一篇之slot內(nèi)容分發(fā)組件詳解的相關(guān)資料

什么是組件?

組件(Component)是 Vue.js 最強大的功能之一。組件可以擴展 HTML 元素,封裝可重用的代碼。在較高層面上,組件是自定義元素,Vue.js 的編譯器為它添加特殊功能。在有些情況下,組件也可以是原生 HTML 元素的形式,以 is 特性擴展。

Slot分發(fā)內(nèi)容

①概述:

簡單來說,假如父組件需要在子組件內(nèi)放一些DOM,那么這些DOM是顯示、不顯示、在哪個地方顯示、如何顯示,就是slot分發(fā)負責的活。

②默認情況下

父組件在子組件內(nèi)套的內(nèi)容,是不顯示的。

例如代碼:

<div id="app"> 
<children> 
<span>12345</span> 
<!--上面這行不會顯示--> 
</children> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
components: { 
children: { //這個無返回值,不會繼續(xù)派發(fā) 
template: "<button>為了明確作用范圍,所以使用button標簽</button>" 
} 
} 
}); 
</script> 

顯示內(nèi)容是一個button按鈕,不包含span標簽里面的內(nèi)容;

③單個slot

簡單來說,只使用這個標簽的話,可以將父組件放在子組件的內(nèi)容,放到想讓他顯示的地方。

<div id="app"> 
<children> 
<span>12345</span> 
<!--上面這行不會顯示--> 
</children> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
components: { 
children: { //這個無返回值,不會繼續(xù)派發(fā) 
template: "<button><slot></slot>為了明確作用范圍,所以使用button標簽</button>" 
} 
} 
}); 
</script> 

例如這樣寫的話,結(jié)果是:

<button><span>12345</span>為了明確作用范圍,所以使用button標簽</button>

即父組件放在子組件里的內(nèi)容,插到了子組件的<slot></slot>位置;

注意,即使有多個標簽,會一起被插入,相當于用父組件放在子組件里的標簽,替換了<slot></slot>這個標簽。

④具名slot

將放在子組件里的不同html標簽放在不同的位置

父組件在要分發(fā)的標簽里添加 slot=”name名” 屬性

子組件在對應(yīng)分發(fā)的位置的slot標簽里,添加name=”name名” 屬性,然后就會將對應(yīng)的標簽放在對應(yīng)的位置了。

示例代碼:

<div id="app"> 
<children> 
<span slot="first">12345</span> 
<span slot="second">56789</span> 
<!--上面這行不會顯示--> 
</children> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
components: { 
children: { //這個無返回值,不會繼續(xù)派發(fā) 
template: "<button><slot name='first'></slot>為了明確作用范圍,<slot name='second'></slot>所以使用button標簽</button>" 
} 
} 
}); 
</script>

顯示結(jié)果為:(為了方便查看,已手動調(diào)整換行)

<button>
<span slot="first">12345</span>
為了明確作用范圍,
<span slot="second">56789</span>
所以使用button標簽
</button>

⑤分發(fā)內(nèi)容的作用域:

被分發(fā)的內(nèi)容的作用域,根據(jù)其所在模板決定,例如,以上標簽,其在父組件的模板中(雖然其被子組件的children標簽所包括,但由于他不在子組件的template屬性中,因此不屬于子組件),則受父組件所控制。

示例代碼:

<div id="app"> 
<children> 
<span slot="first" @click="tobeknow">12345</span> 
<span slot="second">56789</span> 
<!--上面這行不會顯示--> 
</children> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
methods: { 
tobeknow: function () { 
console.log("It is the parent's method"); 
} 
}, 
components: { 
children: { //這個無返回值,不會繼續(xù)派發(fā) 
template: "<button><slot name='first'></slot>為了明確作用范圍,<slot name='second'></slot>所以使用button標簽</button>" 
} 
} 
}); 
</script>

當點擊文字12345的區(qū)域時(而不是按鈕全部),會觸發(fā)父組件的tobeknow方法。

但是點擊其他區(qū)域時則沒有影響。

官方教程是這么說的:

父組件模板的內(nèi)容在父組件作用域內(nèi)編譯;子組件模板的內(nèi)容在子組件作用域內(nèi)編譯

⑥當沒有分發(fā)內(nèi)容時的提示:

假如父組件沒有在子組件中放置有標簽,或者是父組件在子組件中放置標簽,但有slot屬性,而子組件中沒有該slot屬性的標簽。

那么,子組件的slot標簽,將不會起到任何作用。

除非,該slot標簽內(nèi)有內(nèi)容,那么在無分發(fā)內(nèi)容的時候,會顯示該slot標簽內(nèi)的內(nèi)容。

如示例代碼:

<div id="app"> 
<children> 
<span slot="first">【12345】</span> 
<!--上面這行不會顯示--> 
</children> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
components: { 
children: { //這個無返回值,不會繼續(xù)派發(fā) 
template: "<div><slot name='first'><button>【如果沒有內(nèi)容則顯示我1】</button></slot>為了明確作用范圍,<slot name='last'><button>【如果沒有內(nèi)容則顯示我2】</button></slot>所以使用button標簽</div>" 
} 
} 
}); 
</script> 

說明:

【1】name='first'的slot標簽被父組件對應(yīng)的標簽所替換(slot標簽內(nèi)部的內(nèi)容被舍棄);

【2】name='last'的slot標簽,因為沒有對應(yīng)的內(nèi)容,則顯示該slot標簽內(nèi)部的內(nèi)容。

⑦假如想控制子組件根標簽的屬性

【1】首先,由于模板標簽是屬于父組件的,因此,將子組件的指令綁定在模板標簽里,是不可以的(因為他歸屬于父組件);

【2】假如需要通過父組件控制子組件是否顯示(例如v-if或者v-show),那么這個指令顯然是屬于父組件的(例如放在父組件的data下面)??梢詫撕瀸懺谧咏M件的模板上。

如代碼:

<div id="app"> 
<button @click="toshow">點擊讓子組件顯示</button> 
<children v-if="abc"> 
</children> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
data: { 
abc: false 
}, 
methods: { 
toshow: function () { 
this.abc = !this.abc; 
} 
}, 
components: { 
children: { //這個無返回值,不會繼續(xù)派發(fā) 
template: "<div>這里是子組件</div>" 
} 
} 
}); 
</script>

說明:

通過父組件(點擊按鈕,切換v-if指令的值)控制子組件是否顯示。

【3】假如需要通過子組件,控制子組件是否顯示(比如讓他隱藏),那么這個指令顯然是屬于子組件的(會將值放在子組件的data屬性下),那么就不能像上面這么寫,而是必須放置在子組件的根標簽中。

<div id="app"> 
<button @click="toshow">點擊讓子組件顯示</button> 
<children> 
<span slot="first">【12345】</span> 
<!--上面這行不會顯示--> 
</children> 
</div> 
<script> 
var vm = new Vue({ 
el: '#app', 
methods: { 
toshow: function () { 
this.$children[0].tohidden = true; 
} 
}, 
components: { 
children: { //這個無返回值,不會繼續(xù)派發(fā) 
template: "<div v-if='tohidden' @click='tohide'>這里是子組件</div>", 
data: function () { 
return { 
tohidden: true 
} 
}, 
methods: { 
tohide: function () { 
this.tohidden = !this.tohidden; 
} 
} 
} 
} 
}); 
</script>

說明:

點擊子組件會讓子組件消失;

點擊父組件的按鈕,通過更改子組件的tohidden屬性,讓子組件重新顯示。

子組件的指令綁定在子組件的模板之中(如此才能調(diào)用);

以上所述是小編給大家介紹的Vuejs第十一篇組件之slot內(nèi)容分發(fā)實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • vue項目檢測依賴包是否有使用的問題

    vue項目檢測依賴包是否有使用的問題

    這篇文章主要介紹了vue項目檢測依賴包是否有使用的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue組件通信方法案例總結(jié)

    Vue組件通信方法案例總結(jié)

    這篇文章主要介紹了Vue組件通信方法案例總結(jié),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 強大Vue.js組件淺析

    強大Vue.js組件淺析

    這篇文章主要為大家介紹了Vue.js組件,組件是Vue.js最強大的功能之一,感興趣的小伙伴們可以參考一下
    2016-09-09
  • vue使用driver.js完成頁面引導功能的示例詳解

    vue使用driver.js完成頁面引導功能的示例詳解

    在Vue中,driver.js通常是指用于實現(xiàn)用戶引導和教程功能的JavaScript庫,它可以幫助開發(fā)者在應(yīng)用程序中創(chuàng)建交互式的引導和教程,以引導用戶了解應(yīng)用程序的不同功能和界面,本文就簡單的給大家介紹一下vue如何使用driver.js完成頁面引導功能
    2023-08-08
  • django+vue實現(xiàn)跨域的示例代碼

    django+vue實現(xiàn)跨域的示例代碼

    在我們的項目中需要用到django實現(xiàn)跨域的問題,本文通過示例代碼給大家詳細介紹django+vue實現(xiàn)跨域的方法,感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • Vue監(jiān)聽一個數(shù)組id是否與另一個數(shù)組id相同的方法

    Vue監(jiān)聽一個數(shù)組id是否與另一個數(shù)組id相同的方法

    今天小編就為大家分享一篇Vue監(jiān)聽一個數(shù)組id是否與另一個數(shù)組id相同的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue3?hook重構(gòu)DataV的全屏容器組件詳解

    vue3?hook重構(gòu)DataV的全屏容器組件詳解

    這篇文章主要為大家介紹了vue3?hook重構(gòu)DataV的全屏容器組件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • IDEA安裝vue插件圖文詳解

    IDEA安裝vue插件圖文詳解

    這篇文章主要為大家詳細介紹了IDEA安裝vue插件圖文,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 關(guān)于Nuxt的五種渲染模式的差異和使用場景全解析

    關(guān)于Nuxt的五種渲染模式的差異和使用場景全解析

    這篇文章主要介紹了關(guān)于Nuxt的五種渲染模式的差異和使用場景全解析,在過去傳統(tǒng)開發(fā)中,頁面渲染任務(wù)是由服務(wù)端完成的,那么Nuxt是如何渲染的呢,需要的朋友可以參考下
    2023-04-04
  • vue之監(jiān)聽頁面是否以到底部

    vue之監(jiān)聽頁面是否以到底部

    這篇文章主要介紹了vue之監(jiān)聽頁面是否以到底部問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論

凭祥市| 阳高县| 广河县| 蒙山县| 兴化市| 剑河县| 鄂托克前旗| 思南县| 阿克| 盐城市| 新营市| 福州市| 边坝县| 杂多县| 类乌齐县| 舒城县| 郸城县| 华亭县| 特克斯县| 嘉义县| 新和县| 甘孜县| 阳春市| 探索| 宁安市| 江山市| 台东市| 宣威市| 梁河县| 武穴市| 金湖县| 大姚县| 广丰县| 张家港市| 常宁市| 苏尼特左旗| 进贤县| 潜山县| 平安县| 美姑县| 金寨县|