幾個(gè)月nuxt.js項(xiàng)目使用后,實(shí)用知識(shí)點(diǎn)總結(jié)【干貨】
關(guān)注公眾號(hào)?前端人,回復(fù)“加群”
添加無廣告優(yōu)質(zhì)學(xué)習(xí)群

干了幾個(gè)月的nuxt項(xiàng)目,差點(diǎn)沒把自己給干翻。在公司沒開干nuxt項(xiàng)目之前,我也沒接觸過nuxt,潦潦草草看了幾眼官網(wǎng)就開干了,在這過程中也踩了不少坑,也寫了不少無謂的代碼,所以借助這次時(shí)間總結(jié)了一些實(shí)戰(zhàn)用到的知識(shí)點(diǎn)
希望能幫到大家,能讓你少踩點(diǎn)坑,文采不好,湊合著看。
middleware定義
nuxt.config layout pages
middleware顧名思義就是中間件的意思,在中間價(jià)可以做路由攔截,參數(shù)過濾等等
middleware
nuxt.config 配置文件定義
export?default{
?router:{
?????middleware:?['xxxx']?
?????//直接寫中間件文件名,比如middleware/auth.js,直接寫auth就ojbk
??}
}
特別提醒? :定義在nuxt.config中的中間件要在根目錄的middleware文件下,定義對(duì)應(yīng)的js文件,導(dǎo)出一個(gè)函數(shù)。
layout頁面定義
export?default?{
??middleware:({route,params,query})=>{
????console.log(route,params,query,?'layout')
??}
}
###?pages頁面定義
```js
export?default?{
??middleware:({route,params,query})=>{
????console.log(route,params,query,?'page')
??}
}
middleware的第一參數(shù)是一個(gè)上下文參數(shù),能夠解構(gòu)出route,params,query等等...參數(shù),足夠我們做各種騷操作。既然它們能夠定義在不同位置,那么它們的執(zhí)行順序就有前有后?。
執(zhí)行順序:
nuxt.config?=>?layout?=>?page
validate 參數(shù)驗(yàn)證 (pages)
validate鉤子主要是做頁面級(jí)別(pages)的參數(shù)驗(yàn)證操作,在它的上下文能夠解構(gòu)出params,query...參數(shù),最后return true代表驗(yàn)證通過,return false表示驗(yàn)證失敗。
export?default?{
??validate({params,query}){
????console.log(params,query,'validate')
????return?true
??}
}
asyncData 服務(wù)端請(qǐng)求異步數(shù)據(jù) (pages)
asyncData 主要做服務(wù)端數(shù)據(jù)請(qǐng)求渲染,在它上下文能夠解構(gòu)出axios,route,params...參數(shù),
要解構(gòu)出axios,route,params...參數(shù),要解構(gòu)出axios,還需要做一些額外配置,往下拉有講到。
解構(gòu)出$axios,就可以做ajax請(qǐng)求,最后把要渲染的數(shù)據(jù)return出去就行。
export?default?{
??async?asyncData({$axios,route}){
????let?data?=?await?$axios('xxx/xxx/xx')
????return?{
?????data
????}
??}
}
擴(kuò)展路由(nuxt.config)
在nuxt默認(rèn)為約定是路由,就是在pages在創(chuàng)建一個(gè)文件,或者一個(gè)文件夾就會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的路由,無需手動(dòng)配置什么,方便極了
這里就不多說,這里只要說一下,當(dāng)我們要對(duì)某個(gè)地址做一個(gè)特殊操作的時(shí)候,或者全面接管約定式路由的時(shí)候,就需要用擴(kuò)展路由了。
假如想讓一個(gè)叫/hahaha/:id的路由也跳到詳情,也這樣做?
export?default?{
??router:{
????extendRoutes:(routes,resolve)=>{
??????routes.push({
????????name:"hahaha",
????????path:'/hahaha/:id',
????????component:resolve(__dirname,'pages/detail/_id.vue')
??????})
????}
??}
}
假如要全面接管約定式路由,可以這樣做?
export?default?{
??router:{
????extendRoutes(routes,?resolve){
?????return?[
???????{
?????????name:"home",
?????????path:"/",
?????????component:resolve(__dirname,'pages/index'),
?????????meta:{
???????????title:"home"
?????????}
???????}
???????...這里還可以繼續(xù)寫,一般如果要接管約定式路由的話,都會(huì)把它放到一個(gè)文件再引入
?????]
????}
??}
}
定制錯(cuò)誤頁面 (layout)
處理錯(cuò)誤頁面,默認(rèn)情況下,nuxt提供了一個(gè)默認(rèn)的錯(cuò)誤頁面,如果你嫌它錯(cuò)的哇,也可以自己定制一個(gè)風(fēng)騷的錯(cuò)誤頁面,直接下layout目錄下定義一個(gè)error.vue文件就可以定制自己喜歡的錯(cuò)誤頁面了,它會(huì)代替默認(rèn)的錯(cuò)誤頁面,在error.vue的prop有個(gè)error屬于是包含錯(cuò)誤信息的
<template>
??<div>
???錯(cuò)誤頁面{{?error?}}
??div>
template>
美女乱伦
|
狠狠操狠狠色
|
亚洲社区电影
|
伊人干综合
|
丁香色五月婷婷
|
