關(guān)于VUE的編譯作用域及slot作用域插槽問(wèn)題
什么是插槽?插槽的指令為v-slot,它目前取代了slot和slot-scope,插槽內(nèi)容,vue實(shí)例一套內(nèi)容分發(fā)的api,將slot元素作為承載分發(fā)內(nèi)容的出口。
插槽分為單個(gè)插槽,具名插槽,還有作用域插槽,前兩種比較簡(jiǎn)單這里就不贅述了,今天的重點(diǎn)是討論作用域插槽。
簡(jiǎn)單來(lái)說(shuō),前兩種插槽的內(nèi)容和樣式皆由父組件決定,也就是說(shuō)顯示什么內(nèi)容和怎樣顯示都由父組件決定;
作用域插槽的樣式由父組件決定,內(nèi)容卻由子組件控制。簡(jiǎn)單來(lái)說(shuō):前兩種插槽不能綁定數(shù)據(jù),作用域插槽是一個(gè)帶綁定數(shù)據(jù)的插槽。
下面給大家介紹VUE的編譯作用域及slot作用域插槽問(wèn)題,一起看看吧!
其實(shí)就是 如果有很多個(gè)組件 ,當(dāng)你在組件 使用變量的時(shí)候 ,那么你變量的作用域其實(shí)就也是在他定義的代碼中找,如果沒(méi)找到,那么就報(bào)錯(cuò),【這個(gè)很基礎(chǔ)的 是人都看出的】
官方說(shuō):父組件模板的所有東西都會(huì)在父級(jí)作用域內(nèi)編譯;子 組件模板的所有東西都會(huì)在子級(jí)作用域內(nèi)編譯。
下面例子完美說(shuō)明了:
作用域插槽是slot一個(gè)比較難理解的點(diǎn)這里需要細(xì)心理解:
我現(xiàn)在說(shuō)下軟件需求目標(biāo):
子組件中有一組數(shù)據(jù):比如:pLanguages: ['JavaScript', 'Python', 'Swift', 'Go', 'C++'],我要他在子組件的插槽中 ,有的用列表顯示,有的用 - 鏈接、有的用 * 鏈接。
先看源代碼(未使用插槽,寫(xiě)死的,在這個(gè)代碼中改寫(xiě) 使用插槽作用域):
源代碼:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>購(gòu)物車(chē)</title> <script src="js/vue.js"></script> </head> <body> <!-- 未使用插槽 下面模板是寫(xiě)死的 --> <template id="cpn"> <div> <ul> <li v-for=" item in pLanguages">{{item}}</li> </ul> </div> </template> <div id="app"> <cpn></cpn> </div> <script> const app = new Vue({ el: "#app", components: { 'cpn': { template: "#cpn", data() { return { pLanguages: ['JavaScript', 'Python', 'Swift', 'Go', 'C++'] } } } } }) </script> </body> </html>
那么如果用插槽:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>購(gòu)物車(chē)</title> <script src="js/vue.js"></script> </head> <body> <!-- 使用 了 插槽 且 下面設(shè)置了 插槽slot 默認(rèn)值 --> <template id="cpn"> <div> <slot> <!-- 已改動(dòng) --> <ul> <li v-for=" item in pLanguages">{{item}}</li> </ul> </slot> </div> </template> <div id="app"> <cpn></cpn> <!-- 使用默認(rèn)值 列表的形式 --> <cpn> <!-- 已改動(dòng) --> <!-- 問(wèn)題就在這里 我想要以 - 鏈接的方式展現(xiàn)cpn組件中data中的數(shù)據(jù),我無(wú)法獲取, 因?yàn)樽饔糜颍@里的作用域是Vue實(shí)例app的! 只能獲取到Vue實(shí)例app的data! 所以 下面這句代碼是錯(cuò)的?。?! 所以怎么解決插槽代碼獲取子組件中的data呢? --> <span v-for="item in pLanguages">{{item + "-"}}</span> </cpn> </div> <script> const app = new Vue({ el: "#app", components: { 'cpn': { template: "#cpn", data() { return { pLanguages: ['JavaScript', 'Python', 'Swift', 'Go', 'C++'] } } } } }) </script> </body> </html>
代碼已經(jīng)在里面很詳細(xì)的說(shuō)明了,問(wèn)題也標(biāo)注出來(lái)了,簡(jiǎn)而言之:
因?yàn)椴辉谧咏M件的作用域,怎么解決插槽代碼獲取子組件中的data呢?
解決方案: 利用slot作用域插槽
到此這篇關(guān)于VUE 的 編譯作用域 以及 slot作用域插槽的文章就介紹到這了,更多相關(guān)vue作用域插槽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
尤雨溪開(kāi)發(fā)vue?dev?server理解vite原理
這篇文章主要為大家介紹了尤雨溪開(kāi)發(fā)的玩具vite,vue-dev-server來(lái)理解vite原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07徹底搞懂并解決vue-cli4中圖片顯示的問(wèn)題實(shí)現(xiàn)
這篇文章主要介紹了徹底搞懂并解決vue-cli4中圖片顯示的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08vue-router beforeEach跳轉(zhuǎn)路由驗(yàn)證用戶(hù)登錄狀態(tài)
這篇文章主要介紹了vue-router beforeEach跳轉(zhuǎn)路由驗(yàn)證用戶(hù)登錄狀態(tài),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Vue實(shí)現(xiàn)當(dāng)前頁(yè)面刷新的七種方法總結(jié)
大家在vue項(xiàng)目中當(dāng)刪除或者增加一條記錄的時(shí)候希望當(dāng)前頁(yè)面可以重新刷新,但是vue框架自帶的router是不支持刷新當(dāng)前頁(yè)面功能,所以本文就給大家分享了七種vue實(shí)現(xiàn)當(dāng)前頁(yè)面刷新的方法,需要的朋友可以參考下2023-07-07vue打包terser壓縮去除控制臺(tái)打印和斷點(diǎn)過(guò)程
這篇文章主要介紹了vue打包terser壓縮去除控制臺(tái)打印和斷點(diǎn)過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-07-07Vue3+ElementPlus 表單組件的封裝實(shí)例
這篇文章主要介紹了Vue3+ElementPlus 表單組件的封裝實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06Vue中動(dòng)態(tài)class的多種寫(xiě)法
這篇文章主要介紹了Vue之動(dòng)態(tài)class的幾種寫(xiě)法,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12