vue 組件使用中的一些細(xì)節(jié)點(diǎn)
細(xì)節(jié)一
基礎(chǔ)例子
運(yùn)行結(jié)果:
以上大家都懂,這邊就不多說,回到代碼里,有時候我們需要 tbody 里面每一行是一個子組件,那我們代碼可以怎么寫呢?我們可以這樣寫,定義一個全局組件,如下:
然后我們在 body 里面可以這么調(diào)用:
運(yùn)行結(jié)果:
可以看到 row 是有打印出來了,但它實(shí)際上里面沒有任務(wù)內(nèi)容,那我們的問題出在哪呢?回到代碼我們發(fā)現(xiàn)我們在創(chuàng)建 vue 實(shí)例的時候沒有指定要掛載的點(diǎn),所以我們通過 el 來指定 vue 接管的 Dom ,如下:
運(yùn)行結(jié)果:
感覺上沒有問題,但真的是這樣嗎?我們通過檢查元素,查看DOM結(jié)構(gòu):
大家可以看到出錯啦?正常的三個 tr 應(yīng)該是在 tbody 里面, 而現(xiàn)在跑到跟 tbody 同一層了,這是怎么回事呢?
在H5的規(guī)范里面,要求我們 table 里面有 tbody, tbody 里面必須得放 tr,而現(xiàn)在我們使用子組件里面寫成 row, 所以我們的瀏覽器在解析的時候就會出問題。
那么我們一旦遇到這種情況出現(xiàn) bug 要怎么解呢? 這時候我們可以借助 vue 提供的 is 屬性來解決這個問題。很簡單, tbody 里面只能寫 tr, 那我們就都寫 tr,可是實(shí)際上我們要顯示 tr 并不是就真的只顯示 tr 空的內(nèi)容,我們需要顯示 row 組件的內(nèi)容,那怎么做?
我們可以在 tr 多一個屬性is 讓它等于 row, 如下:
這段代碼的意思是:我要用一個組件,但是我不能直接寫這個組件,所以我們寫了一個 tr, 我們用 is 表示雖然我寫的是 tr, 但它表示是 row 組件,這樣能既能符合 H5 的規(guī)范又能顯示我們組件的內(nèi)容 ,程序就不會有 bug 了。
運(yùn)行結(jié)果:
一切正常。
同樣我們使用 ul, select 標(biāo)簽的時候,也可以用這種方法。
細(xì)節(jié)二
基礎(chǔ)例子
我們定義了一個組件 row,里面有段文本,如果我們想把這段文本單獨(dú)提取出來用變量表示 ,那么你很有可能會這樣寫:
看似完美,在打開瀏覽器運(yùn)行你會發(fā)現(xiàn),bug 正向你招手:
主要意思是 data 是要一個函數(shù),而不是一個對象,什么情況,在根組件,也就是最外層 vue 的實(shí)例,我們通過對象定義是 ok 的,但是在非根組件的子組件這樣定義是不行滴。data 定義要求是一個函數(shù),同時這個函數(shù)要求返回一個對象,如下:
運(yùn)行結(jié)果:
這樣問題就解決啦。
之所以這么定義,原因是一個子組件不像根組件只被調(diào)用一次,而是可以多次調(diào)用,那么每一個子組件的數(shù)據(jù)我們不希望和其它的子組件產(chǎn)生沖突或者說每個子組件都應(yīng)該有一個自己的數(shù)據(jù)域,通過函數(shù)返回一個對象就可以實(shí)現(xiàn)這個需求。
細(xì)節(jié)三
基礎(chǔ)例子
運(yùn)行,點(diǎn)擊彈出click,沒毛病。vue 不建議我們在代碼里面操作 Dom, 但是在處理一些極其復(fù)雜的動畫效果,我們還真得操作 Dom, 那么在 vue 中如何操作 Dom 呢? 我們可以通過 ref 引用的方式,如下:
這時候我們有個需求,就是點(diǎn)擊div 的時候,把里面的內(nèi)容打印出來,我們可以通過引用獲取div節(jié)點(diǎn),然后打印div 里面的內(nèi)容即可:
運(yùn)行結(jié)果:
總結(jié)
以上所述是小編給大家介紹的vue 組件使用中的一些細(xì)節(jié)點(diǎn),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
element-ui循環(huán)顯示radio控件信息的方法
今天小編就為大家分享一篇element-ui循環(huán)顯示radio控件信息的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08vue3 element-plus如何使用icon圖標(biāo)組件
這篇文章主要介紹了vue3 element-plus如何使用icon圖標(biāo)組件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03Vue+ElementUI實(shí)現(xiàn)從后臺動態(tài)填充下拉框的示例代碼
本文主要介紹了Vue+ElementUI實(shí)現(xiàn)從后臺動態(tài)填充下拉框的示例代碼,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02基于vue3和element plus實(shí)現(xiàn)甘特圖
甘特圖是一種重要的項目管理工具,它可以通過圖形化的方式展示項目的進(jìn)度和時間表,甘特圖通常由一個橫軸和一個縱軸組成,甘特圖對于項目管理非常重要,所以本文給大家介紹了如何基于vue3和element plus實(shí)現(xiàn)甘特圖,需要的朋友可以參考下2024-06-06Vue?2?和?Vue?3?中?toRefs函數(shù)的不用用法
Vue?是一款流行的JavaScript?框架,用于構(gòu)建用戶界面,在Vue2和?Vue3中,都存在一個名為toRefs的函數(shù),但其行為在這兩個版本中有所不同,這篇文章主要介紹了Vue2和Vue3中toRefs的區(qū)別,需要的朋友可以參考下2023-08-08在nuxt使用vueX代替storage的實(shí)現(xiàn)方案
這篇文章主要介紹了在nuxt使用vueX代替storage的實(shí)現(xiàn)方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-10-10vscode中開發(fā)運(yùn)行uniapp項目詳細(xì)步驟
VSCode作為一個非常強(qiáng)大的代碼編輯器,可以集成眾多的插件和工具來優(yōu)化開發(fā)效率,這篇文章主要給大家介紹了關(guān)于vscode中開發(fā)運(yùn)行uniapp項目的詳細(xì)步驟,需要的朋友可以參考下2023-07-07