Nuxt.js筆記

前置知識css

SSR服務器渲染html

Vue SSR(server side rendering)服務端渲染 和 Vue SPA(single page application)單頁應用vue

Vue SSR->將原本要放在瀏覽器執行建立的組件,放到服務端先建立好,而後生成對應的html
將他們直接發送到瀏覽器,最後將這些靜態標記激活爲客戶端徹底可交互的應用程序node

SSR針對SPA的好處:webpack

1)更好的SEO,因爲搜索引擎抓取工具能夠直接查看徹底渲染後的頁面web

2)更快的到達時間(time-to-content),特別是對網絡慢或者運行緩慢的設備vue-router

很差的地方:vuex

1)開發條件所限。瀏覽器特定的代碼,只能在某些生命週期鉤子函數(lifecycle hook)中使用vue-cli

2)涉及構建設置和部署的要求更多npm

3)更多的服務器端負載

 

Nuxt.js

Nuxt.js是使用 Webpack 和 Node.js 進行封裝的基於Vue的SSR框架

它能夠不須要本身搭建SSR程序,而是經過約定好的文件結構和API便可實現一個首屏渲染的Web應用

安裝

一、先安裝vue-cli(只需安裝一次,安裝過就不用裝了)

二、使用vue安裝nuxt

vue init nuxt/starter mynuxt(項目名)

而後cd mynuxt

三、使用npm install安裝依賴包

npm install

四、最後啓動服務

npm run dev

 

文件結構

assets:資源文件,放置須要通過 webpack 打包處理的資源文件,如 scss,圖片,字體等

component 組件,這裏存放在頁面中,能夠複用的組件

layouts 佈局,全部頁面都會加載在佈局頁面中的 <nuxt /> 標籤中

middleware 中間件,能夠在頁面中調用: middleware: 'middlewareName'

pages 頁面,用於生成對應路由,支持嵌套,支持動態路由

plugins 插件,SPA中用的各種第三方組件和一些node模塊均可以在這引入

static 靜態文件,放置不須要通過 webpack 打包的靜態資源。如一些 js, css 庫

store 狀態管理,內置了vuex,能夠直接返回數據模塊或返回一個自建vuex根對象

nuxt.config.js,文件用於組織Nuxt.js 應用的個性化配置,以便覆蓋默認配置

 

nuxt.config.js配置文件

對程序的擴展管理可大概分爲如下類:

/*
build:主要對應 Webpack 中的各配置項,能夠對默認的 Webpack 配置進行擴展,如這裏代碼
cache:主要對應內置的組件緩存模塊lru-cache的配置對象,有默認值,可選關閉
css:對應咱們在SPA隨處引用樣式文件的require語句
dev:用於自定義配置環境變量,對應以前webpack.config.js相關文件中的變量語句
env:同上息息相關
generate:對generate命令執行時的行爲作一些定製
head:對應vue-meta插件的全局配置,vue-meta用於VUE/SSR程序的文檔元信息的管理
loading:用於定製化Nuxt.js內置的進度條組件
performance:用於配置Node.js服務器性能上的配置
plugins:用於管理和應用對應plugins文件夾中的插件
rootdir:用於設置 Nuxt.js 應用的根目錄(這倆api有很大合併的意義)
srcdir:用於設置 Nuxt.js 應用的源碼目錄(這倆api有很大合併的意義)
router:用於對vue-router的擴展和定製,其中還包括了中間件的配置,但並不完美
transition:用於定製Nuxt.js內置的頁面切換過渡效果的默認屬性值
watchers:用於定製Nuxt.js內置的文件監聽模塊chokidar和 Webpack 的相關配置項
*/

 

配置IP和端口

在package.json裏面進行配置

   "config":{
        "nuxt":{
            "host":"127.0.0.1",
            "port":"2019"
        }
    }

配置好後,輸入npm run dev重啓下服務便可

 

路由

Nuxt.js 根據 pages 目錄結構去生成 vue-router 配置,也就是說 pages 目錄的結構直接影響路由結構

|-- pages
    |-- posts
        |-- index.vue
        |-- welcome.vue
    |-- about.vue
    |

會生成

routes: [
  {
    path: '/posts',
    component: '~pages/posts/index.vue'
  }, {
    path: '/posts/welcome',
    component: '~pages/posts/welcome.vue'
  }, {
    path: '/about',
    component: '~pages/about.vue'
  }, {
    path: '/',
    component: '~pages/index.vue'
  }
]

 

還能夠在文件名前加 _

|-- pages
    |-- _about.vue
    |-- index.vue

會生成

routes: [
  {
    path: '/',
    component: '~pages/index.vue'
  }
]

 

動態路由

在pages/news下創建_id.vue

如下劃線爲前綴的Vue文件就是動態路由,而後在文件裏邊有 $route.params.id來接收參數

<template>
    <div>
        <h3>new-content</h3>
        <p>newsId:{{$route.params.id}}</p>
        <ul>
            <li>Home</li>
        </ul>
    </div>
</template>

pages/news/index.vue

進入了新聞詳細頁,並在詳細頁中取得了傳遞過來的新聞ID

<template>
    <div>
        <h3>news page</h3>
        <p>newsID:{{$route.params.newsId}}</p>
        <ul>
            <li><a href="/">HOME</a></li>
            <li><a href="/news/123">new-1</a></li>
            <li><a href="/news/p">new-2</a></li>
        </ul>
    </div>
</template>

 

下面是動態參數校驗

export default {
    validate({params}){
        //params的id必須是一個數字
        return /^\d+$/.test(params.id);
    }
}

使用了validate方法,並把params傳遞進去,而後用正則進行了校驗,若是正則返回了true正常進入頁面,若是返回false進入404頁面

好比new-2傳的id不是數字

<template>
    <div>
        <h3>news page</h3>
        <p>newsID:{{$route.params.newsId}}</p>
        <ul>
            <li><a href="/">HOME</a></li>
            <li><a href="/news/123">new-1</a></li>
            <li><a href="/news/p">new-2</a></li>
        </ul>
    </div>
</template>

當點擊new-2的時候就會進入404頁面

 

默認模板和默認佈局

只要修改默認模板時候都須要npm run dev 重啓下服務

默認佈局主要針對於頁面的統一佈局使用。它在位置根目錄下的layouts/default.vue。須要注意的是在默認佈局裏不要加入頭部信息,只是關於<template>標籤下的內容統一訂製

相關文章
相關標籤/搜索