亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

vue-router 一些容易被忽略的知識(shí)點(diǎn)

chunquedong / 972人閱讀

摘要:調(diào)用全局的守衛(wèi)。在被激活的組件里調(diào)用。用創(chuàng)建好的實(shí)例調(diào)用守衛(wèi)中傳給的回調(diào)函數(shù)。

本文適用于對 Vue.js 和 vue-router 有一定程度了解的開發(fā)者
除特殊說明,vue-router 版本為 3.0.2
正文

路由 class 匹配

路由匹配后會(huì)給該標(biāo)簽添加 class 屬性值 .router-link-active,該功能在嵌套路由中十分方便

class 的實(shí)際屬性值可以通過 active-class 來控制,全局默認(rèn)值則通過路由構(gòu)造選項(xiàng) linkActiveClass 來控制

默認(rèn)情況下,當(dāng)前路由的所有父級(jí)會(huì)默認(rèn)添加 active-class ,即 當(dāng)前處于/user/1 會(huì)給當(dāng)前頁面的 添加 active-class ,如果不需要此項(xiàng),給 添加 exact 即可,精準(zhǔn)匹配的 class 通過 exact-active-class 控制

示例:JSFiddle

通配符路由

路由配置: {path: "/user-*"} ,訪問 /user-admin 路由,可在 $route.params.pathMatch 獲取到 "admin" (pathMatch 僅在 vue-router@3.0.2+ 可用,低于此版本使用 $route.params[0] 嘗試獲取)

示例:JSFiddle

文檔:捕獲所有路由或 404 Not found 路由

路由高級(jí)匹配模式

vue-router 使用 path-to-regexp 作為路由匹配引擎,該庫可以通過輸入的路徑生成匹配規(guī)則的正則表達(dá)式,從而實(shí)現(xiàn)路由匹配功能。

path-to-regexp 中常用的方法 pathToRegexp(path, keys, options) 第三個(gè)參數(shù)為 pathToRegexpOptions 編譯正則的選項(xiàng),在 vue-router@2.6.0+ 版本可以通過配置 routepathToRegexpOptions 參數(shù)添加高級(jí)配選項(xiàng)。

參考例子,其可通過 "/optional-params/:foo?" 實(shí)現(xiàn)可選 param ,也可通過 "/params-with-regex/:id(d+)" 實(shí)現(xiàn)僅匹配數(shù)字 param(非命中路由向后匹配)。

pathToRegexpOptions 的內(nèi)容為:

sensitive 大小寫敏感 (default: false)

strict 末尾斜杠是否精確匹配 (default: false)

end 全局匹配 (default: true)

start 從開始位置展開匹配 (default: true)

delimiter 指定其他分隔符 (default: "/")

endsWith 指定標(biāo)準(zhǔn)的結(jié)束字符

whitelist 指定分隔符列表 (default: undefined, any character)

源碼:vue-router/src/create-route-map.js:154
文檔:高級(jí)匹配模式

編程式導(dǎo)航的鉤子處理

vue-router@2.2.0+,可選的在 router.pushrouter.replace 中提供 onCompleteonAbort 回調(diào)作為第二個(gè)和第三個(gè)參數(shù)。這些回調(diào)將會(huì)在導(dǎo)航成功完成 (在所有的異步鉤子被解析之后) 或終止 (導(dǎo)航到相同的路由、或在當(dāng)前導(dǎo)航完成之前導(dǎo)航到另一個(gè)不同的路由) 的時(shí)候進(jìn)行相應(yīng)的調(diào)用。
該功能可用在少數(shù)埋點(diǎn)場景,而不用配置復(fù)雜的路由鉤子。

路由重定向

route 配置 redirect 屬性可使路由重定向到指定路由,該屬性支持 String/Object/Function 三種類型的值,其中 Function 的參數(shù)為 to 對象

給重定向的中間路由添加 beforeEachbeforeLeave 不會(huì)有效果,給 router 添加的鉤子也不能檢測到此次重定向,如果需要判斷重定向來源,可使用路由對象 $route.redirectedFrom 判斷

該功能適合路由 path 修改后保留原路由的重定向

文檔:重定向

嵌套命名視圖

在平級(jí)展示多個(gè)視圖時(shí)(單個(gè)視圖使用多個(gè)平級(jí)的),可以用到 name prop
例如在 sidebar/list 的布局頁面上,不用在父級(jí)視圖容器去書寫許多子組件的邏輯,只需要在路由配置中配置好相關(guān)頁面組件,從而進(jìn)行組件關(guān)系解耦,也能高效控制子視圖渲染

例子:JSFiddle

文檔:嵌套命名視圖

路由別名

route 配置 alias 屬性可以使訪問者保持原有 url 卻訪問到指定路由中去。

該屬性支持 StringArray 兩種類型,當(dāng) alias 與其他路由重復(fù)時(shí),以先申明的路由為準(zhǔn),同時(shí)別名不會(huì)進(jìn)行路由 class 匹配

文檔:別名

路由組件傳參

該功能旨在給組件與路由解除耦合關(guān)系,給 route 配置 props: true 同時(shí)組件內(nèi) props 配置與 prams 相同的變量,可以直接通過訪問 props 而不用通過 $route.params 去訪問參數(shù)

如果 props 是一個(gè)對象,對象內(nèi)容會(huì)當(dāng)作靜態(tài)內(nèi)容傳入組件作為 props

當(dāng) props 為一個(gè)函數(shù),函數(shù)接收一個(gè) route 參數(shù),可以使 query 作為 props 傳入組件或?qū)崿F(xiàn)更多高級(jí)功能

文檔:路由組件傳參

完整的導(dǎo)航解析流程

導(dǎo)航被觸發(fā)。

在失活的組件里調(diào)用離開守衛(wèi)。

調(diào)用全局的 beforeEach 守衛(wèi)。

在重用的組件里調(diào)用 beforeRouteUpdate 守衛(wèi) (vue-router@2.2+)。

在路由配置里調(diào)用 beforeEnter。

解析異步路由組件。

在被激活的組件里調(diào)用 beforeRouteEnter。

調(diào)用全局的 beforeResolve 守衛(wèi) (vue-router@2.5+)。

導(dǎo)航被確認(rèn)。

調(diào)用全局的 afterEach 鉤子。

觸發(fā) DOM 更新。

用創(chuàng)建好的實(shí)例調(diào)用 beforeRouteEnter 守衛(wèi)中傳給 next 的回調(diào)函數(shù)。

文檔:完整的導(dǎo)航解析流程

滾動(dòng)行為

創(chuàng)建 Router 實(shí)例,可以提供一個(gè) scrollBehavior 方法,該方法接收 to 、fromsavedPosition(該頁面原存在的xy值,僅在通過瀏覽器前進(jìn)后退中可用)

在該方法中返回 {selector:to.hash} 還可實(shí)現(xiàn)類似于“滾動(dòng)到錨點(diǎn)”的行為,vue-router@2.6.0+ 還可返回 {offset?:{x,y}} 進(jìn)行位置偏移,注意該偏移負(fù)值為向負(fù)方向偏移

異步滾動(dòng) 通常用于小眾的過渡組件(transition)和滾動(dòng)行為同時(shí)進(jìn)行的情況下,官方實(shí)例未給太多相關(guān)信息

文檔:滾動(dòng)行為

組件懶加載-按組分塊

SPA(single page application)由于 All in JS 的特性,會(huì)使得首屏加載比較慢,很多人都推薦使用 Webpack 的 代碼分割功能減小單個(gè) JS 體積,當(dāng)所有頁面組件使用動(dòng)態(tài)加載則會(huì)使頁面請求過多而得不償失,所以組件按組分塊則應(yīng)運(yùn)而生:

  const Foo = () => import(/* webpackChunkName: "group-foo" */ "./Foo.vue")
  const Bar = () => import(/* webpackChunkName: "group-foo" */ "./Bar.vue")
  const Baz = () => import(/* webpackChunkName: "group-foo" */ "./Baz.vue")

該功能需要 webpack@2.4+ 支持

文檔:把組件按組分塊

獲取路由匹配組件

router.getMatchedComponents(location?)

該函數(shù)可以獲取傳入?yún)?shù)在路由表中匹配的路由對象數(shù)組,官方文檔中寫到通常在服務(wù)端渲染數(shù)據(jù)預(yù)加載的時(shí)候,也可用于在獲取當(dāng)前路由對象數(shù)組的時(shí)候

如果需要獲取當(dāng)前路由記錄(就是路由構(gòu)造選項(xiàng) routes 配置數(shù)組中的對象副本,包含children 數(shù)組),可用 route.matched

文檔:getMatchedComponents
文檔:$route.matched

解析路由

router.resolve(location, current?, append?)

該函數(shù)可同時(shí)導(dǎo)出一個(gè)類似瀏覽器的 location 對象和一個(gè)根據(jù)匹配到的路由記錄 resolved ,如果沒有匹配到對應(yīng)的對象,resolved 字段默認(rèn)返回 404 組件或錯(cuò)誤數(shù)據(jù)

文檔:router.resolve

添加路由

router.addRoutes(routes:Array)

該函數(shù)可以用戶觸發(fā)添加路由到路由表中,可以嘗試在用戶權(quán)限控制中使用

文檔:router.addRoutes

建議

簡單按鈕的路由跳轉(zhuǎn)邏輯不使用 v-on:click 事件,多使用 標(biāo)簽。

如果 SPA 放置路徑處于域名的子目錄中,不要按照一些網(wǎng)絡(luò)教程寫的去修改 webpack 配置,應(yīng)該修改 Router 構(gòu)建選項(xiàng) 中的 base 值,這樣能避免一些不必要的問題

不要嘗試改變組件內(nèi)的 $route 的內(nèi)容,這個(gè)屬性是只讀,里面的屬性是 immutable 狀態(tài),但你可以 watch 這個(gè)

參考資料

url 的正則表達(dá)式:path-to-regexp - 簡書

vue-router Document

vue-router Source Code

本文首發(fā)地址

blog.shoyuf.top

第一次在 segmentfault 上發(fā)文章,歡迎各位評(píng)論區(qū)中吐槽指正

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/101425.html

相關(guān)文章

  • 容易忽略URL

    摘要:場景再現(xiàn)眾所周知,有三種模式,一般的前端項(xiàng)目中會(huì)選擇模式進(jìn)行開發(fā),最近做了一個(gè)運(yùn)營活動(dòng)就是基于的模式進(jìn)行開發(fā)的。項(xiàng)目注冊了兩個(gè)路由抽象出來的入口頁面需要參數(shù),所以提供瀏覽器里輸入回車后,頁面自動(dòng)增加一個(gè)變?yōu)椤? 場景再現(xiàn) 眾所周知,vue-router有三種模式 :hash、html5、abstract , 一般的前端項(xiàng)目中會(huì)選擇hash模式進(jìn)行開發(fā),最近做了一個(gè)運(yùn)營活動(dòng)就是基于vue-...

    CoyPan 評(píng)論0 收藏0
  • 容易忽略URL

    摘要:場景再現(xiàn)眾所周知,有三種模式,一般的前端項(xiàng)目中會(huì)選擇模式進(jìn)行開發(fā),最近做了一個(gè)運(yùn)營活動(dòng)就是基于的模式進(jìn)行開發(fā)的。項(xiàng)目注冊了兩個(gè)路由抽象出來的入口頁面需要參數(shù),所以提供瀏覽器里輸入回車后,頁面自動(dòng)增加一個(gè)變?yōu)椤? 場景再現(xiàn) 眾所周知,vue-router有三種模式 :hash、html5、abstract , 一般的前端項(xiàng)目中會(huì)選擇hash模式進(jìn)行開發(fā),最近做了一個(gè)運(yùn)營活動(dòng)就是基于vue-...

    Richard_Gao 評(píng)論0 收藏0
  • 快速入門 - Vue2 Tutorials (一)

    摘要:在這個(gè)組件里面有一些鏈接列表,和,這些列表直接使用編寫按照傳統(tǒng)的寫法,如果我們需要往里面添加鏈接的時(shí)候,每次我們都得添加和標(biāo)簽。所以修改如下這樣我們就把數(shù)據(jù)和視圖分開了,模板里面的代碼也簡潔了很多,不再需要寫很多重復(fù)的代碼。 Vue 的官方文檔 對 Vue 介紹非常詳細(xì),但官方文檔使用在 HTML 中引入 vue 的方式進(jìn)行講解,而實(shí)際項(xiàng)目中一般使用腳手架如 vue-cli 初始化項(xiàng)目...

    djfml 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

chunquedong

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<