??? Vue.js專欄:Vue.js 高級(jí)語(yǔ)法系列
????? 個(gè)人簡(jiǎn)介:一個(gè)不甘平庸的平凡人??? 個(gè)人主頁(yè):CoderHing的個(gè)人主頁(yè)
?? 格言: ?? 路漫漫其修遠(yuǎn)兮,吾將上下而求索??
?? 你的一鍵三連是我更新的最大動(dòng)力??
目錄
一、Vue中自定義指令
認(rèn)識(shí)自定義指令
指令的生命周期
指令的參數(shù)和修飾符
二、Vue內(nèi)置組件Teleport
認(rèn)識(shí)Teleport
和組件結(jié)合使用
多個(gè)teleport
三、Vue內(nèi)置組件Suspense
異步組件和Suspense
四、Vue中安裝插件的方式
認(rèn)識(shí)Vue插件
插件的編寫(xiě)方式
五、Vue中渲染函數(shù)的使用
認(rèn)識(shí)h函數(shù)
h()函數(shù) 如何使用?
h函數(shù)的使用過(guò)程
六、Vue中編寫(xiě)jsx的語(yǔ)法
jsx的babel配置
一、Vue中自定義指令
認(rèn)識(shí)自定義指令
在Vue的模板語(yǔ)法中 我們學(xué)了很多指令 除了這些指令 Vue也允許我們自己定義自己的指令
????????注:在Vue中,代碼的復(fù)用和抽象 主要還是通過(guò)組件;
????????通常在某些情況下,你需要對(duì)DOM元素進(jìn)行底層操作,這個(gè)時(shí)候就會(huì)用到 自定義指令
自定義指令分為兩種:
????????自定義局部指令: 組件中通過(guò) directives選項(xiàng)?只能在當(dāng)前組件中使用
????????自定義全局指令: app的?directive方法?可以在任意組件中使用
當(dāng)我們來(lái)做一個(gè)非常簡(jiǎn)單的案例:當(dāng)某個(gè)元素掛載完成后可以自動(dòng)獲取焦點(diǎn)
????????實(shí)現(xiàn)方式一:使用默認(rèn)的實(shí)現(xiàn)方式
JavaScript |
實(shí)現(xiàn)方式二:自定義一個(gè) v-focus的局部指令;
????????這個(gè)自定義指令非常簡(jiǎn)單,我們只需要在組件選項(xiàng)中使用directives即可
????????它是一個(gè)對(duì)象,在對(duì)象中編寫(xiě)我們的自定義指令的名稱(這里不需要加v-)
????????自定義指令有一個(gè)生命周期,是在組件掛載后調(diào)用的mounted?我們可以在其中完成操作
JavaScript |
實(shí)現(xiàn)方式三:自定義一個(gè) v-focus的全局指令
JavaScript |
指令的生命周期
指令定義的對(duì)象,Vue提供了以下的鉤子函數(shù):
????????Created: 綁定的元素attribute 或事件監(jiān)聽(tīng)器被應(yīng)用之前調(diào)用
????????beforeMount: 當(dāng)指令第一次綁定到元素并且在掛載父組件之前調(diào)用
????????Mounted: 在綁定元素的父組件被掛載后調(diào)用
????????beforeUpdate:在更新包含組件的VNode之前調(diào)用
????????Updated: 包含組件的VNode及其子組件的VNode更新后調(diào)用
????????beforeUnmount:在卸載綁定元素的父組件前調(diào)用
????????unmounted:當(dāng)指令與元素解綁且父組件已卸載時(shí),只調(diào)用一次
指令的參數(shù)和修飾符
如果我們指令 需要接受一些參數(shù)或修飾符 呢?
????????james是參數(shù)的名稱 ?abc,cba是修飾符的名稱 后面是傳入的值
在我們的生命周期中,可以通過(guò) bindings獲取到對(duì)應(yīng)的內(nèi)容:
JavaScript |
二、Vue內(nèi)置組件Teleport
認(rèn)識(shí)Teleport
在組件化開(kāi)發(fā)中,封裝一個(gè)組件A 在另外一個(gè)組件B中使用:
????????那么?組件A中的template元素,會(huì)被掛載到組件B中template的某個(gè)位置;
????????最終 應(yīng)用程序會(huì)形成一顆 DOM樹(shù)結(jié)構(gòu)
但在一些情況下,希望 組件不是掛載在這個(gè)組件樹(shù)上的,可能是移動(dòng)到Vue app之外的其他位置:
????????如:移動(dòng)到body元素上.或者我們有 其他的div#app之外的元素上,
????????這個(gè)時(shí)候我們就可以通過(guò)teleport來(lái)完成;
Teleport是什么?
????????他是一個(gè) Vue提供的內(nèi)置組件?類似于react的Portals
????????teleport翻譯過(guò)來(lái)是 心靈傳輸,遠(yuǎn)距離運(yùn)輸?shù)囊馑?/p>
????????????????它有兩個(gè)屬性:
????????????????To: 指定將其中的內(nèi)容移動(dòng)到目標(biāo)元素,可以使用選擇器
????????????????disabled:是否禁用teleport的功能
和組件結(jié)合使用
teleport也可以和組件結(jié)合一起來(lái)使用:
????????當(dāng)我們在teleport中使用組件,并且也可以給他傳入一些數(shù)據(jù)?
?
多個(gè)teleport
????????如果我們將 多個(gè)teleport應(yīng)用到 同一個(gè)目標(biāo)上(to的值相同) 那么這些 目標(biāo)會(huì)進(jìn)行合并
?
三、Vue內(nèi)置組件Suspense
異步組件和Suspense
注:目前(2022年10月9日)Suspense顯示的是一個(gè)實(shí)驗(yàn)性的特性,API隨時(shí)可能會(huì)修改
Suspense是一個(gè)內(nèi)置的全局組件,該組件有兩個(gè)插槽:
????????default:如果default可以顯示,那么顯示default的內(nèi)容
????????fallback:如果default無(wú)法顯示,那么就會(huì)顯示fallback插槽的內(nèi)容;
(一般用于異步組件)
?
四、Vue中安裝插件的方式
認(rèn)識(shí)Vue插件
通常我們向Vue全局添加一些功能時(shí) 會(huì)采用插件的模式,它有兩種編寫(xiě)模式:
????????對(duì)象類型:一個(gè)對(duì)象?必須包含一個(gè)install的函數(shù),該函數(shù)會(huì)在安裝插件時(shí)執(zhí)行
????????函數(shù)類型:一個(gè)function 這個(gè)函數(shù)會(huì)在 安裝插件時(shí) 自動(dòng)執(zhí)行
JavaScript |
JavaScript |
插件可以完成的功能沒(méi)有限制,如下面幾種都可以:
????????添加全局方法 或 property 通過(guò)把它們添加到config.globalProperties上實(shí)現(xiàn)
????????添加全局資源:指令/過(guò)濾器/過(guò)渡 等
????????通過(guò) 全局mixin?來(lái)添加一些組件選項(xiàng)
????????一個(gè)庫(kù),提供自己的API 同時(shí) 提供上面提到的一個(gè)或多個(gè)功能
插件的編寫(xiě)方式
對(duì)象類型的寫(xiě)法
JavaScript |
函數(shù)類型的寫(xiě)法
JavaScript |
五、Vue中渲染函數(shù)的使用
認(rèn)識(shí)h函數(shù)
Vue推薦在大多數(shù)情況下使用模版來(lái)創(chuàng)建你的HTML 然后一些特殊的場(chǎng)景,你真的需要Js的完全編程能力,這個(gè)時(shí)候你可以使用 渲染函數(shù)?它比 模版更接近編譯器
????????Vue在生成真實(shí)DOM之前 會(huì)將我們的節(jié)點(diǎn)轉(zhuǎn)換成VNode,而VNode組合在一起形成一顆樹(shù)結(jié)構(gòu),就是 虛擬DOM(VDOM)
????????事實(shí)上,之前編寫(xiě)的template中的HTML 最終也是?使用渲染函數(shù) 生成?對(duì)應(yīng)的VNode
????????那么 如果你想充分利用Js的編程能力,可以自己來(lái)寫(xiě)createVNode函數(shù),生成對(duì)應(yīng)的VNode
使用h()函數(shù):
????????h()函數(shù) 是一個(gè)用于 創(chuàng)建vnode的一個(gè)函數(shù);
????????其實(shí)更準(zhǔn)確的命名是createVNode()函數(shù),但是為了簡(jiǎn)便在Vue將之 簡(jiǎn)化為 h()函數(shù)
h()函數(shù) 如何使用?
h()函數(shù) 如何使用? => 他接受三個(gè)參數(shù):
JavaScript |
JavaScript |
JavaScript |
圖解(一)
?
注意事項(xiàng):
????????如果 沒(méi)有props?那么通??梢?span style="color:#d83931;">?將children作為第二個(gè)參數(shù)傳入;
????????如果產(chǎn)生歧義,可以將 null作為第二個(gè)參數(shù)傳入,將children作為第三個(gè)參數(shù)傳入
h函數(shù)的使用過(guò)程
h函數(shù)可以在兩個(gè)地方使用:
????????render函數(shù)選項(xiàng)中;
????????setup函數(shù)選項(xiàng)中(setup本身需要是一個(gè)函數(shù)類型,函數(shù)再返回h函數(shù)創(chuàng)建的新VNode)
JavaScript |
JavaScript |
六、Vue中編寫(xiě)jsx的語(yǔ)法
jsx的babel配置
如果我們希望在項(xiàng)目中使用jsx,需要添加對(duì)jsx的支持;
????????jsx通常會(huì)通過(guò)Babel來(lái)進(jìn)行轉(zhuǎn)換(React編寫(xiě)的jsx就是通過(guò)babel轉(zhuǎn)換的)
????????對(duì)于Vue來(lái)說(shuō),我們只需要在Babel中配置對(duì)應(yīng)的插件即可
安裝Babel支持Vue的jsx插件:
JavaScript |
在 babel.config.js配置文件 中配置插件:
JavaScript |
如果是Vite環(huán)境,需要安裝插件:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-813158.html
JavaScript |
到了這里,關(guān)于Vue | Vue.js 高級(jí)語(yǔ)法系列的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!