NuxtJS項目——視圖


  視圖的整體布局圖如下所示:

  備注:此圖來源

  (1)模板

  在項目根目錄下創建一個app.html文件,可以定制化默認的html模板。

  • 在app.html文件中內容如下:
<!-- 這是我簡單修改的 -->
<!DOCTYPE html>
<html {{ HTML_ATTRS }}>
  <head {{ HEAD_ATTRS }}>
    頭部
  </head>
  <body {{ BODY_ATTRS }}>
    主體
  </body>
</html>


<!-- 這是默認的模板 -->
<!DOCTYPE html>
<html {{ HTML_ATTRS }}>
<head {{ HEAD_ATTRS }}>
{{ HEAD }}
</head>
<body {{ BODY_ATTRS }}>
{{ APP }}
</body>
</html>
  • 定制化效果如下:

  (2)布局

  • 默認布局

  在layouts/default.vue文件中可以擴展應用的默認布局。注意了,在布局文件中添加 <nuxt/> 組件用於顯示頁面的主體內容。

  例如,我在default.vue文件中新增這樣一條語句:<h2>Hello World</h2>

<template>
  <div>
    <h2>Hello World</h2>
    <nuxt />
  </div>
</template>

  效果如下:

  • 自定義布局

  layouts 目錄中的每個文件 (頂級) 都將創建一個可通過頁面組件中的 layout 屬性訪問的自定義布局。

  例如在layouts目錄下新增一個mytest.vue文件,內容如下:

<template>
  <div>
    <div>這是我的測試</div>
    <nuxt />
  </div>
</template>

  然后在pages/index.vue文件中添加layout屬性,修改如下:

export default {
  components: {
    Logo
  },
  layout: 'mytest'
}

  最終的效果如下:

  由上圖可知,mytest.vue的布局已經覆蓋了默認的布局。

  • 錯誤頁面

  我們可以通過編輯 layouts/error.vue 文件來定制化錯誤頁面。說明:雖然此文件放在 layouts 文件夾中, 但應該將它看作是一個 頁面(page),並且這個布局文件不需要包含 <nuxt/> 標簽。

  (3)頁面

  頁面組件實際上是 Vue 組件,只不過 Nuxt.js 為這些組件添加了一些特殊的配置項(對應 Nuxt.js 提供的功能特性)以便你能快速開發通用應用。Nuxt.js提供的特殊配置項如下表所示:

屬性名 描述
asyncData 最重要的一個鍵, 支持 異步數據處理,另外該方法的第一個參數為當前頁面組件的 上下文對象。
fetch asyncData方法類似,用於在渲染頁面之前獲取數據填充應用的狀態樹(store)。不同的是 fetch 方法不會設置組件的數據。
head 配置當前頁面的 Meta 標簽。
layout 指定當前頁面使用的布局(layouts 根目錄下的布局文件)
loading 如果設置為false,則阻止頁面自動調用this.$nuxt.$loading.finish()this.$nuxt.$loading.start(),可以手動控制它,僅適用於在nuxt.config.js中設置loading的情況下。
transition 指定頁面切換的過渡動效。
scrollToTop 布爾值,默認: false。 用於判定渲染頁面前是否需要將當前頁面滾動至頂部。這個配置用於 嵌套路由的應用場景。
validate 校驗方法用於校驗 動態路由的參數。
middleware 指定頁面的中間件,中間件會在頁面渲染之前被調用。

  (4)HTML頭部

  Nuxt.js 使用了 vue-meta 更新應用的 頭部標簽(Head) 和 html屬性。在 nuxt.config.js 里定義應用所需的所有默認 meta 標簽,在 head 字段里配置就可以了。說明: Nuxt.js 使用 hid 而不是默認值 vmid 識別元素key。為了避免子組件中的meta標簽不能正確覆蓋父組件中相同的標簽而產生重復的現象,建議利用 hid 鍵為meta標簽配一個唯一的標識編號。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM