中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue基于Nuxt.js實現服務端渲染

發布時間:2021-05-21 11:20:28 來源:億速云 閱讀:209 作者:小新 欄目:web開發

這篇文章主要介紹Vue基于Nuxt.js實現服務端渲染,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

一、快速模板

在已經安裝了 vue-cli 的前提下,可以快速創建一個 nuxt 的項目模板

vue init nuxt-community/starter-template MyProject

其中 MyProject 是項目文件夾名稱,可自定義

通過 npm install (似乎用 yarn install 更順利) 安裝依賴之后,可以直接 npm run dev 在 開發環境 啟動項目

默認啟動的地址為 http://localhost:3000/,可以在 package.json 中添加以下配置來修改主機端口號

 "config": {
  "nuxt": {
   "host": "0.0.0.0",
   "port": "7788"
  }
 },

開發完成后執行 npm run build 打包代碼,最后 npm start 啟動服務

二、重要目錄

生成的 項目目錄 如下

Vue基于Nuxt.js實現服務端渲染

大部分文件夾名稱 都是 nuxt 默認保留的,不可修改

其中比價比較關鍵的目錄有三個:

1. components 組件目錄

Vue基于Nuxt.js實現服務端渲染

一般用來存放 非頁面級別 的組件,如 header、footer 等公共組件

該目錄下的組件具有常規 vue 組件的方法和特性,不會被 nuxt.js 擴展特性

2. layouts 布局目錄

Vue基于Nuxt.js實現服務端渲染

可以修改該目錄下的 default.vue 來修改默認布局

<template>
 <div>
  <my-header></my-header>
  <nuxt/>
  <my-footer></my-footer>
 </div>
</template>

其中 <nuxt/> 是必需的,頁面的主體內容會顯示在這里 (類似于根節點的 <router-view/>)

此外還可以在目錄下新增 error.vue 作為錯誤頁面,具體的寫法可以參考官方文檔

3. pages 頁面目錄

Vue基于Nuxt.js實現服務端渲染

用于存放頁面級別的組件,nuxt 會根據該目錄下的頁面結構生成路由

比如上圖中的頁面結構,會生成這樣的路由配置:

router: {
 routes: [
  {
   name: 'index',
   path: '/',
   component: 'pages/index.vue'
  },
  {
   name: 'about',
   path: '/about',
   component: 'pages/about.vue'
  },
  {
   name: 'classroom',
   path: '/classroom',
   component: 'pages/classroom.vue',
   children: [
    {
     path: 'student',
     component: 'pages/classroom/student.vue',
     name: 'student'
    },
    { //定義帶參數的動態路由,需要創建對應的以下劃線作為前綴的 Vue 文件或目錄
     path: ':id',
     component: 'pages/classroom/_id.vue',
     name: 'classroom-id'
    }
   ]
  }
 ]
}

此外,該目錄下的 vue 組件還具備一些 Nuxt.js 提供的特殊功能特性

其中 asyncData 方法比較常用,支持異步數據處理

這個方法會在 頁面組件 每次加載之前被調用,然后獲取數據并返回給當前組件

asyncData ({ params, error }) {
  return axios.get(`api/posts/${params.id}`)
  .then((res) => {
   return { name: res.data.name}
  })
  .catch((e) => {
   error({ statusCode: 404, message: 'not found' })
  })
 }

asyncData 方法的第一個參數為上下文對象 context,具體屬性可以 查看這里

由于asyncData方法是在組件初始化前被調用的,所以在方法內是沒有辦法通過 this 來引用組件的實例對象

三、使用插件

如果項目中還需要引入其他的第三方插件,可以直接在頁面中引入,這樣在打包的時候,會將插件打包到頁面對應的 js 里面

但要是別的頁面也引入了同樣的插件,就會重復打包。如果沒有需要分頁打包的需求,這時候可以配置 plugins

以 element-ui 為例,在安裝了 element-ui 之后,在 plugins 目錄下創建 elementUI.js

Vue基于Nuxt.js實現服務端渲染

然后在根目錄的 nuxt.config.js 中添加配置項 build.vendor 和 plugins

 build: {
  vendor: ['~/plugins/elementUI.js']
 },
 plugins: [
  {src: '~/plugins/elementUI.js'},
 ]

這里的 plugins 屬性用來配置 vue.js 插件,也就是 可以用 Vue.user() 方法 的插件

默認只需要 src 屬性,另外還可以配置 ssr: false,讓該文件只在客戶端被打包引入

如果是像 axios 這種第三方 (不能 use) 插件,只需要在 plugins 目錄下創建 axios.js

// axios.js

import Vue from 'vue'
import axios from 'axios'

const service = axios.create({
 baseURL: '/api'
})

Vue.prototype.$ajax = axios
export default service

然后在 build.vendor  中添加配置 (不需要配置 plugins)

build: {
 vendor: ['~/plugins/axios.js']
}

這樣在打包的時候,就會把 axios 打包到 vendor.js 中

四、Vuex 狀態樹

如果在 store 目錄下創建了 index.js,nuxt.js 會根據該目錄下的文件創建 Vuex 狀態樹

// store/index.js

import Vue from 'vue'
import Vuex from 'vuex'
import Axios from '~/plugins/axios.js';

Vue.use(Vuex)

const store = () => new Vuex.Store({
 state: {
  author: 'WiseWrong',
  info: ''
 },
 mutations: {
  setInfo (state, val) {
   state.info = val
  }
 },
 actions: {
  loadAboutMeInfo ({commit, state}) {
   return Axios.get(`/about`)
    .then(res => {
     console.log('ajax is success')
     console.log(res.data.info)
     commit('setInfo', res.data.info)
    })
    .catch(err => {
     console.log('error')
    })
  }
 }
})

export default store

Nuxt.js 內置引用了 vuex 模塊,不需要額外安裝

上面的代碼中,我在 actions 中寫了一個 loadAboutMeInfo() 方法,用來請求 /api/about 接口

然后在 about.vue 頁面中調用

// about.vue 

<template>
 <section class="container">
  <div>
   <img src="~/assets/about.png" alt="">
  </div>
  <h2>{{$store.state.info}}</h2>
 </section>
</template>

<script>
export default {
 fetch({ store }) {
  return store.dispatch('loadAboutMeInfo')
 },
 name: 'about',
 data () {
  return {}
 }
}
</script>

成果演示:

Vue基于Nuxt.js實現服務端渲染

vue是什么

Vue是一套用于構建用戶界面的漸進式JavaScript框架,Vue與其它大型框架的區別是,使用Vue可以自底向上逐層應用,其核心庫只關注視圖層,方便與第三方庫和項目整合,且使用Vue可以采用單文件組件和Vue生態系統支持的庫開發復雜的單頁應用。

以上是“Vue基于Nuxt.js實現服務端渲染”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

英德市| 孝感市| 翁源县| 麻栗坡县| 武安市| 台南市| 潜江市| 保亭| 泸溪县| 大埔区| 黄梅县| 鹿邑县| 阿合奇县| 克拉玛依市| 仲巴县| 拉萨市| 阜康市| 隆德县| 班戈县| 乐亭县| 岳普湖县| 东乡| 古丈县| 长乐市| 闻喜县| 民和| 车险| 曲水县| 德化县| 安顺市| 鸡东县| 温宿县| 准格尔旗| 乐山市| 秦皇岛市| 武隆县| 嫩江县| 禹城市| 岳池县| 蒙山县| 宁南县|