我們可以使用 layout
屬性來套用放置於 layouts
的布局。
export default {
layout: 'FrontEnd',
// 或
layout(context) {
return 'FrontEnd'
}
}
關於 layouts
可洽此系列文DAY2 起手式--Nuxt.js目錄結構
Nuxt.js 送我們免費的進度條,在頁面切換的時候,Nuxt.js 使用內置的加載組件顯示。
我們可以在 pages
元件的 loading
決定我們是否要啟用他。
預設值是 true
,如有特定頁面不想使用,就可以自行設定成 false
。
如果所有頁面都不想啟用的話,請洽 nuxt.config.js
module.exports = {
loading: false
}
那我們又要如何使用呢?非常簡單。
this.$nuxt.$loading.start()
this.$nuxt.$loading.finish()
範例如下
export default {
mounted() {
this.$nextTick(() => {
this.$nuxt.$loading.start()
setTimeout(() => this.$nuxt.$loading.finish(), 500)
})
}
}
溫馨提醒:
如果要在 mounted
方法中啟動它,請確保使用 this.$nextTick
來調用它,因為 $loading
可能無法立即使用。
免費送的進度條,還可以自己客製化樣式,想要調整顏色或尺寸,一樣請洽 nuxt.config.js
例如想要改成藍色,高度 5px 都沒有問題!
module.exports = {
loading: {
color: 'blue',
height: '5px'
}
}
什麼?你覺得免費的很醜不喜歡,沒關係我們可以自己刻一個,沒問題!
首先我們需要在 components
目錄下創建自定義的加載組件,如 components/loading.vue
。
接著這個元件可以透過幾種方法了解 loading 狀態作使用,最簡單的兩種方法
start()
:路由更新時,進度條該出來上工了。finish()
:路由更新完畢時,進度條就放工了。直接上基本配置範例,歡迎自行新增樣式。
<template lang="html">
<div class="loading-page" v-if="loading">
<p>Loading...</p>
</div>
</template>
<script>
export default {
data: () => ({
loading: false
}),
methods: {
start() {
this.loading = true
},
finish() {
this.loading = false
}
}
}
</script>
最後最後,記得要通知 nuxt.config.js
一聲,我們要換成自己的 loading 元件囉!
module.exports = {
loading: '~/components/loading.vue'
}
還記得系列文DAY2 起手式--Nuxt.js目錄結構我們提過的 middleware
資料夾嗎?
沒錯,就是拿來放驗證的那個!
其實不管是 layouts
、 pages
、 components
的頁面,都可以綁驗證。
執行的順序也是由大到小,所以會依照 layouts
、 pages
、 components
的順序執行。
那到底要驗證什麼?要怎麼做呢?
例如我們轉跳到結帳頁面前,需驗證使用者是否已登入帳號,那我們就可以在 middleware
寫好一個登入驗證,驗證使用者是否已登入,若沒登入就給我回去login登入吧!middleware/authenticated.js
export default function ({ store, redirect }) {
// If the user is not authenticated
if (!store.state.authenticated) {
return redirect('/login')
}
}
之後在結帳頁面元件,使用 middleware
屬性綁定剛剛寫好的驗證檔案即可。
export default {
middleware: 'authenticated'
}
Nuxt.js 滿貼心的,切換頁面的時候會自己幫我們把頁面滾動到頂部,但如果是嵌套子路由就不滾了。
所以如果想要滾、或不想要滾,都沒問題,直接在 scrollToTop
改就可以了。
export default {
scrollToTop: true
}
有用到動態路由的話,就一定會有動態路由參數,可不可以判斷參數是否有效呢?
我們可以透過 validate
方法來做驗證。
export default {
validate({ params, query, store }) {
// Must be a number
return /^\d+$/.test(params.id)
}
}
return
值有兩種可使用
true
: 參數有效,沒毛病。false
: 參數有病,停止渲染跳404送你離開千里之外。watchQuery 属性key 属性
老實說還有三個沒提到的屬性,研究了一下還是不甚了解,想想還是先不提,我們先欠著好嗎?
如果未來有想明白了,或許我還是可以回來補充說明一下。