亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Nuxt.js之自動(dòng)路由原理的實(shí)現(xiàn)方法

 更新時(shí)間:2018年11月21日 11:27:04   作者:lemon  
這篇文章主要介紹了Nuxt.js之自動(dòng)路由原理的實(shí)現(xiàn)方法,nuxt.js會(huì)根據(jù)pages目錄結(jié)構(gòu)自動(dòng)生成vue-router模塊的路由配置。非常具有實(shí)用價(jià)值,需要的朋友可以參考下

Nuxt.js 是一個(gè)基于 Vue.js 的通用應(yīng)用框架。集成了Vue 2、Vue-Router、 Vuex、Vue-Meta,用于開(kāi)發(fā)完整而強(qiáng)大的 Web 應(yīng)用。

它的特性有服務(wù)端渲染、強(qiáng)大的路由功能,支持異步數(shù)據(jù)、HTML頭部標(biāo)簽管理等。

今天主要介紹的就是Nuxt的特性之一,強(qiáng)大的路由功能。nuxt.js會(huì)根據(jù)pages目錄結(jié)構(gòu)自動(dòng)生成vue-router模塊的路由配置。

nuxt源碼地址: https://github.com/nuxt/nuxt.js

建議打開(kāi)源碼跟著文章的步驟看,第一次寫(xiě),文中有任何錯(cuò)誤或者表述不清的地方,歡迎批評(píng)指正。

首先介紹下nuxt路由的使用

nuxt會(huì)根據(jù)pages下的文件自動(dòng)生成路由并引入,支持vue-router的基礎(chǔ)路由,動(dòng)態(tài)路由,嵌套路由等?;A(chǔ)路由很簡(jiǎn)單,需要注意的是,在使用動(dòng)態(tài)路由時(shí),需要?jiǎng)?chuàng)建對(duì)應(yīng)的以下劃線作為前綴的 Vue文件或目錄

例如:

pages/
--| users/
-----| _id.vue
--| index.vue

Nuxt.js 生成對(duì)應(yīng)的路由配置表為:

router: {
 routes: [{
   name: 'index',
   path: '/',
   component: 'pages/index.vue'
   },
   {
   name: 'users-id',
   path: '/users/:id?',
   component: 'pages/users/_id.vue'
   }]
  }

生成的動(dòng)態(tài)路由, users-id 的路由路徑帶有 :id? 參數(shù),表示該路由是可選的。如果你想將它設(shè)置為必選的路由,需要在 users/_id 目錄內(nèi)創(chuàng)建一個(gè) index.vue 文件。

其次需要注意的是在使用嵌套路由時(shí),需要在pages下添加一個(gè) 同名的Vue 文件,用來(lái)存放子視圖組件。

例如:

pages/
--| users/
-----| _id.vue 
-----| index.vue 
--| users.vue

Nuxt.js 生成對(duì)應(yīng)的路由配置表為:

 router: {
 routes: [{
  path: '/users',
  component: 'pages/users.vue',
   children: [{
   path: '',
   component: 'pages/users/index.vue',
   name: 'users'
   },
   {
   path: ':id',
   component: 'pages/users/_id.vue',
   name: 'users-id'
   }]
  }]
 }

接下來(lái)看為什么要這么寫(xiě),包括怎么自動(dòng)生成路由的原理。

第一步

從npm run dev 說(shuō)起,package.json 中,npm run dev 運(yùn)行之后的命令是

dev : "PORT=3004backpack dev"

ps: Backpack是Node.js項(xiàng)目的簡(jiǎn)約的構(gòu)建系統(tǒng),在這里它自定義了一個(gè)配置backpack.config.js擴(kuò)展webpack,backpack dev命令是以開(kāi)發(fā)模式運(yùn)行webpack。

第二步

再看自定義的backpack.config.js,返回了server文件下的index.js

第三步

再查看index.js,在這里它搭建了服務(wù)器端口號(hào),讀取了nuxt.config文件,并且初始化了nuxt類。引入了node module中nuxt的Nuxt, Builder

第四步

現(xiàn)在可以去nuxt的源碼看具體是怎么自動(dòng)生成路由的了
在builder.js中,對(duì)所有文件進(jìn)行打包,其中有一步就是構(gòu)建路由

generateRoutesAndFiles, 它引入了glob庫(kù)對(duì)page下的文件進(jìn)行遍歷,并進(jìn)行了字符串的處理,最后將所有的vue文件地址,整個(gè)的項(xiàng)目地址和pages作為參數(shù)傳給createRoutes 函數(shù)

第五步

再看createRoutes函數(shù)具體做了什么 (common/utils.js)
在createRoutes函數(shù)中對(duì)傳過(guò)來(lái)的所有文件地址進(jìn)行遍歷,再對(duì)每一個(gè)文件地址字符串處理,以中劃線進(jìn)行拼接。以此作為route.name


再用lodash庫(kù)對(duì)routes進(jìn)行查找,這里就可以看出為什么使用嵌套路由要在同路徑下再加一個(gè)同名的vue文件,它的判斷條件就是在routes中找到 name:route.name的集合

如果有嵌套路由,暫時(shí)route.path為空,沒(méi)有嵌套路由就直接以'/'拼接route.path,這里就可以看到動(dòng)態(tài)路由的合成原理,如果是動(dòng)態(tài)路由,route.path將會(huì)以 : 替換 _ ,末尾加上 ?


將route.name和route.path都放入routes中,進(jìn)行排序,路徑短的先放入,最后調(diào)用cleanChildrenRoutes函數(shù),對(duì)嵌套路由進(jìn)行處理。

至此對(duì)routes的path 和name的命名的處理已經(jīng)結(jié)束。

第六步

再回到build.js中, 打包完后會(huì)生成模版文件,routes.js

在模版文件route.js中, 實(shí)例了項(xiàng)目的路由

并引入了路由組件,在引入時(shí),將組件命名為下劃線加上組件的hash值并去重引入


這樣就是一個(gè)完整的自動(dòng)生成路由的過(guò)程。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue表格組件Vxe-table使用技巧總結(jié)

    Vue表格組件Vxe-table使用技巧總結(jié)

    這篇文章主要給大家介紹了關(guān)于Vue表格組件Vxe-table使用技巧的相關(guān)資料,文中還介紹了VXEtable展示指定行所遇到得問(wèn)題,對(duì)大家學(xué)習(xí)或者使用Vxe-table具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-09-09
  • Vue的過(guò)濾器你真了解嗎

    Vue的過(guò)濾器你真了解嗎

    這篇文章主要為大家詳細(xì)介紹了Vue的過(guò)濾器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • vue輪播圖插件vue-concise-slider的使用

    vue輪播圖插件vue-concise-slider的使用

    這篇文章主要介紹了vue輪播圖插件vue-concise-slider的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • ElementUI?Upload源碼組件上傳流程解析

    ElementUI?Upload源碼組件上傳流程解析

    這篇文章主要為大家介紹了ElementUI?Upload源碼組件上傳流程解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • vue3組件化開(kāi)發(fā)之可復(fù)用性的應(yīng)用實(shí)例詳解

    vue3組件化開(kāi)發(fā)之可復(fù)用性的應(yīng)用實(shí)例詳解

    不斷把公共的、可以獨(dú)立拆分出來(lái)的抽出來(lái)作為一個(gè)獨(dú)立可復(fù)用的組件來(lái)向上提供調(diào)用,這樣讓我們的代碼更加方便組織和管理,并且擴(kuò)展性也更強(qiáng),下面這篇文章主要給大家介紹了關(guān)于vue3組件化開(kāi)發(fā)之可復(fù)用性應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 用vue-cli開(kāi)發(fā)vue時(shí)的代理設(shè)置方法

    用vue-cli開(kāi)發(fā)vue時(shí)的代理設(shè)置方法

    今天小編就為大家分享一篇用vue-cli開(kāi)發(fā)vue時(shí)的代理設(shè)置方法,具有很好的參考價(jià)值。希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • 解決vue elementUI中table里數(shù)字、字母、中文混合排序問(wèn)題

    解決vue elementUI中table里數(shù)字、字母、中文混合排序問(wèn)題

    這篇文章主要介紹了vue elementUI中table里數(shù)字、字母、中文混合排序問(wèn)題,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Vue集成lodop插件實(shí)現(xiàn)打印功能

    Vue集成lodop插件實(shí)現(xiàn)打印功能

    lodop 取意自“l(fā)oad or print”,是一款優(yōu)秀的 Web 打印控件。本文將在Vue中集成lodop插件實(shí)現(xiàn)打印功能,感興趣的小伙伴可以了解一下
    2023-01-01
  • 詳解Vue項(xiàng)目編譯后部署在非網(wǎng)站根目錄的解決方案

    詳解Vue項(xiàng)目編譯后部署在非網(wǎng)站根目錄的解決方案

    這篇文章主要介紹了Vue項(xiàng)目編譯后部署在非網(wǎng)站根目錄的解決方案,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • openlayers6之地圖覆蓋物overlay詳解

    openlayers6之地圖覆蓋物overlay詳解

    overlay就是在地圖上以另外一種形式浮現(xiàn)在地圖上,常見(jiàn)的地圖覆蓋物為這三種類型,如:popup 彈窗、label標(biāo)注信息、text文本信息等,接下來(lái)跟隨小編看下openlayers6之地圖覆蓋物overlay詳解,一起看看吧
    2021-09-09

最新評(píng)論