真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染

這篇文章主要介紹Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)與策劃設(shè)計(jì),龍江網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:龍江等地區(qū)。龍江做網(wǎng)站價(jià)格咨詢:18980820575

一、快速模板

在已經(jīng)安裝了 vue-cli 的前提下,可以快速創(chuàng)建一個(gè) nuxt 的項(xiàng)目模板

vue init nuxt-community/starter-template MyProject

其中 MyProject 是項(xiàng)目文件夾名稱,可自定義

通過 npm install (似乎用 yarn install更順利) 安裝依賴之后,可以直接 npm run dev 在 開發(fā)環(huán)境啟動(dòng)項(xiàng)目

默認(rèn)啟動(dòng)的地址為 http://localhost:3000/,可以在 package.json中添加以下配置來修改主機(jī)端口號(hào)

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

開發(fā)完成后執(zhí)行 npm run build 打包代碼,最后 npm start 啟動(dòng)服務(wù)

二、重要目錄

生成的 項(xiàng)目目錄 如下

Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染

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

其中比價(jià)比較關(guān)鍵的目錄有三個(gè):

1. components 組件目錄

Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染

一般用來存放 非頁(yè)面級(jí)別的組件,如 header、footer 等公共組件

該目錄下的組件具有常規(guī) vue 組件的方法和特性,不會(huì)被 nuxt.js 擴(kuò)展特性

2. layouts 布局目錄

Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染

可以修改該目錄下的 default.vue 來修改默認(rèn)布局

其中 是必需的,頁(yè)面的主體內(nèi)容會(huì)顯示在這里 (類似于根節(jié)點(diǎn)的

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

3. pages 頁(yè)面目錄

Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染

用于存放頁(yè)面級(jí)別的組件,nuxt 會(huì)根據(jù)該目錄下的頁(yè)面結(jié)構(gòu)生成路由

比如上圖中的頁(yè)面結(jié)構(gòu),會(huì)生成這樣的路由配置:

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'
    },
    { //定義帶參數(shù)的動(dòng)態(tài)路由,需要?jiǎng)?chuàng)建對(duì)應(yīng)的以下劃線作為前綴的 Vue 文件或目錄
     path: ':id',
     component: 'pages/classroom/_id.vue',
     name: 'classroom-id'
    }
   ]
  }
 ]
}

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

其中 asyncData方法比較常用,支持異步數(shù)據(jù)處理

這個(gè)方法會(huì)在 頁(yè)面組件每次加載之前被調(diào)用,然后獲取數(shù)據(jù)并返回給當(dāng)前組件

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 方法的第一個(gè)參數(shù)為上下文對(duì)象 context,具體屬性可以 查看這里

由于asyncData方法是在組件初始化前被調(diào)用的,所以在方法內(nèi)是沒有辦法通過 this 來引用組件的實(shí)例對(duì)象

三、使用插件

如果項(xiàng)目中還需要引入其他的第三方插件,可以直接在頁(yè)面中引入,這樣在打包的時(shí)候,會(huì)將插件打包到頁(yè)面對(duì)應(yīng)的 js 里面

但要是別的頁(yè)面也引入了同樣的插件,就會(huì)重復(fù)打包。如果沒有需要分頁(yè)打包的需求,這時(shí)候可以配置 plugins

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

Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染

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

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

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

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

如果是像 axios 這種第三方 (不能 use) 插件,只需要在 plugins 目錄下創(chuàng)建 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']
}

這樣在打包的時(shí)候,就會(huì)把 axios 打包到 vendor.js 中

四、Vuex 狀態(tài)樹

如果在 store 目錄下創(chuàng)建了 index.js,nuxt.js 會(huì)根據(jù)該目錄下的文件創(chuàng)建 Vuex 狀態(tài)樹

// 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 內(nèi)置引用了 vuex 模塊,不需要額外安裝

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

然后在 about.vue 頁(yè)面中調(diào)用

// about.vue 



成果演示:

Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染

vue是什么

Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式JavaScript框架,Vue與其它大型框架的區(qū)別是,使用Vue可以自底向上逐層應(yīng)用,其核心庫(kù)只關(guān)注視圖層,方便與第三方庫(kù)和項(xiàng)目整合,且使用Vue可以采用單文件組件和Vue生態(tài)系統(tǒng)支持的庫(kù)開發(fā)復(fù)雜的單頁(yè)應(yīng)用。

以上是“Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁(yè)名稱:Vue基于Nuxt.js實(shí)現(xiàn)服務(wù)端渲染
本文網(wǎng)址:http://weahome.cn/article/ijohjd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部