vue 的 solt 子組件過(guò)濾過(guò)程解析
如下圖:
1、定義了一個(gè)類(lèi)似下拉的組件 mySelect , 然后里面有自定義的組件 myOptions
2、有很多時(shí)候,我們希望, mySelect 組件內(nèi)部的子組件,只能是 myOptions 。 不應(yīng)該有 <div>666</div>
3、在mySelect 里面做一層過(guò)濾,去掉不需要的組件
下面先看看
myOptions.vue 組件代碼
<template> <div class="options"> <div>這里是 options</div> </div> </template> <script> // @ is an alias to /src export default { name: 'myoptions', data(){ return {} }, created(){ }, mounted(){ } } </script>
接下來(lái)是 mySelect 的代碼:
<template> <div class="select"> <div>這里是 Select</div> <slot></slot> </div> </template> <script> // @ is an alias to /src export default { name: "myselect", data(){ return { _children:[] } }, created(){ console.log(this.$children) // 輸出為 [] console.log(this.$slots.default) //輸出為 [VNode, VNode, VNode] var arr = this.$slots.default || [] var res = []; for(var i = 0; i < arr.length; i++){ var item = arr[i]; if(item.componentOptions && item.componentOptions.tag == "myOptions"){ res.push(item); } } this._children = res; this.$slots.default = res; }, mounted(){ console.log(this.$slots.default) //[VNode, VNode] console.log(this.$children)//因?yàn)檫^(guò)濾掉了一個(gè),所以為 [VueComponent, VueComponent] } } </script>
在 mySelect 的 created 和 mounted 里面,分別查看
this.$slots.default和 this.$children
就會(huì)發(fā)現(xiàn)內(nèi)部的子組件渲染,與這個(gè)有很大關(guān)系,只需要過(guò)濾一下 slots 就可以了
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Vue.js在頁(yè)面加載時(shí)執(zhí)行某個(gè)方法
這篇文章主要介紹了詳解Vue.js在頁(yè)面加載時(shí)執(zhí)行某個(gè)方法的實(shí)現(xiàn)代碼,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11關(guān)于vue3默認(rèn)把所有onSomething當(dāng)作v-on事件綁定的思考
這篇文章主要介紹了關(guān)于vue3默認(rèn)把所有`onSomething`當(dāng)作`v-on`事件綁定的思考,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05vue 基于abstract 路由模式 實(shí)現(xiàn)頁(yè)面內(nèi)嵌的示例代碼
這篇文章主要介紹了vue 基于abstract 路由模式 實(shí)現(xiàn)頁(yè)面內(nèi)嵌的示例代碼,幫助大家更好的理解和使用vue框架,感興趣的朋友可以了解下2020-12-12詳解Vue的watch中的immediate與watch是什么意思
這篇文章主要介紹了詳解Vue的watch中的immediate與watch是什么意思,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Vue-Router如何動(dòng)態(tài)更改當(dāng)前頁(yè)url query
這篇文章主要介紹了Vue-Router如何動(dòng)態(tài)更改當(dāng)前頁(yè)url query問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08在vue中使用v-bind:class的選項(xiàng)卡方法
今天小編就為大家分享一篇在vue中使用v-bind:class的選項(xiàng)卡方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09