溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Nuxt.js開(kāi)啟SSR渲染的教程詳解

發(fā)布時(shí)間:2020-10-13 05:29:57 來(lái)源:腳本之家 閱讀:454 作者:吳封斌技術(shù)博客 欄目:web開(kāi)發(fā)

第一節(jié):nuxt.js相關(guān)概述

nuxt.js簡(jiǎn)單的說(shuō)是Vue.js的通用框架,最常用的就是用來(lái)作SSR(服務(wù)器端渲染).Vue.js是開(kāi)發(fā)SPA(單頁(yè)應(yīng)用)的,Nuxt.js這個(gè)框架,用Vue開(kāi)發(fā)多頁(yè)應(yīng)用,并在服務(wù)端完成渲染,可以直接用命令把我們制作的vue項(xiàng)目生成為靜態(tài)html。

1.那服務(wù)器端渲染到底有什么好處呢?

主要的原因時(shí)SPA(單頁(yè)應(yīng)用)不利于搜索引擎的SEO操作,Nuxt.js適合作新聞、博客、電影、咨詢這樣的需要搜索引擎提供流量的項(xiàng)目。如果你要作移動(dòng)端的項(xiàng)目,就沒(méi)必要使用這個(gè)框架了。

2.什么是SSR?

SSR,即服務(wù)器渲染,就是在服務(wù)器端將對(duì)Vue頁(yè)面進(jìn)行渲染生成html文件,將html頁(yè)面?zhèn)鬟f給瀏覽器。

SSR兩個(gè)優(yōu)點(diǎn):

(1)SEO 不同于SPA的HTML只有一個(gè)無(wú)實(shí)際內(nèi)容的HTML和一個(gè)app.js,SSR生成的HTML是有內(nèi)容的,這讓搜索引擎能夠索引到頁(yè)面內(nèi)容。

(2)更快內(nèi)容到達(dá)時(shí)間 傳統(tǒng)的SPA應(yīng)用是將bundle.js從服務(wù)器獲取,然后在客戶端解析并掛載到dom。而SSR直接將HTML字符串傳遞給瀏覽器。大大加快了首屏加載時(shí)間。

Nuxt.js的官方網(wǎng)站是這樣介紹的:

Nuxt.js 是一個(gè)基于 Vue.js 的通用應(yīng)用框架。 通過(guò)對(duì)客戶端/服務(wù)端基礎(chǔ)架構(gòu)的抽象組織,Nuxt.js 主要關(guān)注的是應(yīng)用的 UI渲染。

Nuxt.js是特點(diǎn)(優(yōu)點(diǎn)):

•基于 Vue.js
•自動(dòng)代碼分層
•服務(wù)端渲染
•強(qiáng)大的路由功能,支持異步數(shù)據(jù)
•靜態(tài)文件服務(wù)
•ES6/ES7 語(yǔ)法支持
•打包和壓縮 JS 和 CSS
•HTML頭部標(biāo)簽管理
•本地開(kāi)發(fā)支持熱加載
•集成ESLint
•支持各種樣式預(yù)處理器: SASS、LESS、 Stylus等等

第二節(jié):Nuxt環(huán)境搭建

1.nuxt.js安裝

在使用npm前你需要安裝Node到系統(tǒng)中。

(1)用npm來(lái)安裝vue-cli這個(gè)框架。

npm install vue-cli -g

安裝完成后可以使用vue -V 來(lái)測(cè)試是否安裝成功。(注意:這里要使用大寫的V,小寫無(wú)效)。

 (2)使用vue安裝 nuxt

安裝好vue-cli后,就可以使用init命令來(lái)初始化Nuxt.js項(xiàng)目。

vue init nuxt/starter

這時(shí)候他會(huì)在github上下載模版,然后會(huì)詢問(wèn)你項(xiàng)目的名稱叫什么,作者什么的,這些完全可以根據(jù)自己的愛(ài)好填寫。

(3)使用npm install安裝依賴包

npm install

這個(gè)過(guò)程是要等一會(huì)的,如果你這個(gè)過(guò)程安裝失敗,可以直接誒刪除項(xiàng)目中的node_modules文件夾后,重新npm install進(jìn)行安裝。

(4)使用npm run dev 啟動(dòng)服務(wù)

(5)在瀏覽器輸入 localhost:3000,可以看到結(jié)果。

 

第三節(jié) :Nuxt目錄結(jié)構(gòu)

Nuxt.js開(kāi)啟SSR渲染的教程詳解

第四節(jié):Nuxt常用配置項(xiàng)

1.配置IP和端口

開(kāi)發(fā)中經(jīng)常會(huì)遇到端口被占用或者指定IP的情況。我們需要在根目錄下的package.json里對(duì)config項(xiàng)進(jìn)行配置。比如現(xiàn)在我們想把IP配置成127.0.0.1,端口設(shè)置1000。

/package.json

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

配置好后,我們?cè)诮K端中輸入npm run dev,然后你會(huì)看到服務(wù)地址改為了127.0.0.1:1000.

2.配置全局CSS

在開(kāi)發(fā)多頁(yè)項(xiàng)目時(shí),都會(huì)定義一個(gè)全局的CSS來(lái)初始化我們的頁(yè)面渲染,比如把padding和margin設(shè)置成0,網(wǎng)上也有非常出名的開(kāi)源css文件normailze.css。要定義這些配置,需要在nuxt.config.js里進(jìn)行操作。

比如現(xiàn)在我們要把頁(yè)面字體設(shè)置為紅色,就可以在assets/css/normailze.css文件,然后把字體設(shè)置為紅色。

/assets/css/normailze.css

html{
 color:red;
}

/nuxt.config.js
 css:['~assets/css/normailze.css'],

設(shè)置好后,在終端輸入npm run dev 。然后你會(huì)發(fā)現(xiàn)字體已經(jīng)變成了紅色。

3.配置webpack的loader

在nuxt.config.js里是可以對(duì)webpack的基本配置進(jìn)行覆蓋的,比如現(xiàn)在我們要配置一個(gè)url-loader來(lái)進(jìn)行小圖片的64位打包。就可以在nuxt.config.js的build選項(xiàng)里進(jìn)行配置。

build: {
 loaders:[
  {
  test:/\.(png|jpe?g|gif|svg)$/,
  loader:"url-loader",
  query:{
   limit:10000,
   name:'img/[name].[hash].[ext]'
  }
  }
 ],
 /*
 ** Run ESLint on save
 */
 extend (config, { isDev, isClient }) {
  if (isDev && isClient) {
  config.module.rules.push({
   enforce: 'pre',
   test: /\.(js|vue)$/,
   loader: 'eslint-loader',
   exclude: /(node_modules)/
  })
  }
 }
 }

 

第五節(jié):Nuxt的路由配置和參數(shù)傳遞

Nuxt.js的路由并不復(fù)雜,它給我們進(jìn)行了封裝,讓我們節(jié)省了很多配置環(huán)節(jié)。

1.簡(jiǎn)單路由Demo

我們現(xiàn)在根目錄的pages文件下新建兩個(gè)文件夾,about和news(模仿關(guān)于我們和新聞的功能模塊)。

(1)在about文件夾下新建index.vue文件,并寫入下面的代碼:

<template>
 <div>
  <h3>About Index page</h3>
  <ul>
  <li><a href="/" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Home</a></li>
  </ul>
 </div>
</template>

(2)在news文件夾下新建index.vue文件,并寫入下面的代碼:

<template>
 <div>
  <h3>News Index page</h3>
  <ul>
  <li><a href="/" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Home</a></li>
  </ul>
 </div>
</template>

(3)修改原來(lái)的pages文件夾下的index.vue,刪除沒(méi)用的代碼,寫入下面鏈接代碼:

<template>
 <div>
 <ul>
  <li><a href="/" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >HOME</a></li>
  <li><a href="/about" rel="external nofollow" >ABOUT</a></li>
  <li><a href="/news" rel="external nofollow" >NEWS</a></li>
 </ul>
 </div>
</template>
<script>
export default {
 components: {
 }
}
</script>
<style>
</style>

 

由于Nuxt.js都為我們作好了,不用寫任何配置代碼。所以我們可以在頁(yè)面上實(shí)現(xiàn)相關(guān)跳轉(zhuǎn)。

2.<nuxt-link>標(biāo)簽

雖然上面的例子跳轉(zhuǎn)已經(jīng)成功,但是Nuxt.js并不推薦這種<a>標(biāo)簽的作法,它為我們準(zhǔn)備了<nuxt-link>標(biāo)簽(vue中叫組件)。我們先把首頁(yè)的<a>標(biāo)簽替換成<nuxt-link>,改造如下:

<template>
 <div>
 <ul>
  <li><nuxt-link :to="{name:'index'}">HOME</nuxt-link></li>
  <li><nuxt-link :to="{name:'about'}">ABOUT</nuxt-link></li>
  <li><nuxt-link :to="{name:'news'}">NEWS</nuxt-link></li>
 </ul>
 </div>
</template>
<script>
export default {
 components: {
 }
}
</script>
<style>
</style>

 

我們?cè)俅晤A(yù)覽頁(yè)面,也是可以進(jìn)行正常跳轉(zhuǎn)的,在實(shí)際開(kāi)發(fā)中盡量使用標(biāo)簽的方法跳轉(zhuǎn)路由。

3.params傳遞參數(shù)

路由經(jīng)常需要傳遞參數(shù),我們可以簡(jiǎn)單的使用params來(lái)進(jìn)行傳遞參數(shù),我們現(xiàn)在向新聞頁(yè)面(news)傳遞個(gè)參數(shù),然后在新聞頁(yè)面進(jìn)行簡(jiǎn)單的接收。

(1)我們先修改pages下的Index.vue文件,給新聞的跳轉(zhuǎn)加上params參數(shù),傳遞3306。

<template>
 <div>
 <ul>
  <li><nuxt-link :to="{name:'index'}">HOME</nuxt-link></li>
  <li><nuxt-link :to="{name:'about'}">ABOUT</nuxt-link></li>
  <li><nuxt-link :to="{name:'news',params:{newsId:3306}}">NEWS</nuxt-link></li>
 </ul>
 </div>
</template>
<script>
export default {
 components: {
 }
}
</script>
<style>
</style>

 

(2)在news文件夾下的index.vue里用$route.params.newsId進(jìn)行接收,代碼如下。

<template>
 <div>
  <h3>News Index page</h3>
  <p>NewsID:{{$route.params.newsId}}</p>
  <ul>
  <li><a href="/" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Home</a></li>
  </ul>
 </div>
</template>

 

成功實(shí)現(xiàn)參數(shù)的傳遞。

 

第六節(jié):Nuxt的動(dòng)態(tài)路由和參數(shù)校驗(yàn)

1.動(dòng)態(tài)路由,其實(shí)動(dòng)態(tài)路由就是帶參數(shù)的路由。比如我們現(xiàn)在新聞模塊下面有很多新聞詳細(xì)頁(yè),這時(shí)候就需要?jiǎng)討B(tài)路由的幫助了。

(1)新聞詳細(xì)頁(yè)面: 我在news文件夾下面新建了_id.vue的文件,以下畫線為前綴的Vue文件就是動(dòng)態(tài)路由,然后在文件里邊有 $route.params.id來(lái)接收參數(shù)。

/pages/news/_id.vue

<template>
 <div>
  <h3>News-Content [{{$route.params.id}}]</h3>
  <ul>
  <li><a href="/" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Home</a></li>
  </ul>
 </div>
</template>

 

(2)修改新聞首頁(yè)路由

我們?cè)?pages/news/index.vue進(jìn)行修改,增加兩個(gè)詳細(xì)頁(yè)的路由News-1和News-2。

 

<template>
 <div>
  <h3>News Index page</h3>
  <p>NewsID:{{$route.params.newsId}}</p>
  <ul>
  <li><a href="/" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Home</a></li>
  <li><a href="/news/123" rel="external nofollow" >News-1</a></li>
  <li><a href="/news/456" rel="external nofollow" >News-2</a></li>
  </ul>
 </div>
</template>

代碼寫好后,打開(kāi)npm run dev 進(jìn)行查看,我們已經(jīng)進(jìn)入了新聞詳細(xì)頁(yè),并在詳細(xì)頁(yè)中取得了傳遞過(guò)來(lái)的新聞id。

2.參數(shù)校驗(yàn)

進(jìn)入一個(gè)頁(yè)面,對(duì)參數(shù)傳遞的正確性校驗(yàn)是必須的,Nuxt.js也貼心的為我們準(zhǔn)備了校驗(yàn)方法validate( )。

(1)在接受參數(shù)的頁(yè)面添加

/pages/news/_id.vue

export default {
 validate ({ params }) {
 // Must be a number
 return /^\d+$/.test(params.id)
 }
}

使用了validate方法,并把params傳遞進(jìn)去,然后用正則進(jìn)行了校驗(yàn),如果正則返回了true正常進(jìn)入頁(yè)面,如果返回false進(jìn)入404頁(yè)面。

 

第七節(jié):Nuxt的路由動(dòng)畫效果

路由的動(dòng)畫效果,也叫作頁(yè)面的更換效果。Nuxt.js提供兩種方法為路由提供動(dòng)畫效果,一種是全局的,一種是針對(duì)單獨(dú)頁(yè)面制作。

1.全局路由動(dòng)畫

全局動(dòng)畫默認(rèn)使用page來(lái)進(jìn)行設(shè)置,例如現(xiàn)在我們?yōu)槊總€(gè)頁(yè)面都設(shè)置一個(gè)進(jìn)入和退出時(shí)的漸隱漸現(xiàn)的效果。我們可以先在根目錄的assets/css下建立一個(gè)normailze.css文件。

(1)添加樣式文件

/assets/css/normailze.css(沒(méi)有請(qǐng)自行建立)

.page-enter-active, .page-leave-active {
 transition: opacity 2s;
}
.page-enter, .page-leave-active {
 opacity: 0;
}

(2)文件配置

然后在nuxt.config.js里加入一個(gè)全局的css文件就可以了。

css:['assets/css/main.css'],

這時(shí)候在頁(yè)面切換的時(shí)候就會(huì)有2秒鐘的動(dòng)畫切換效果了,但是你會(huì)發(fā)現(xiàn)一些頁(yè)面是沒(méi)有效果的,這是因?yàn)槟銢](méi)有是<nuxt-link>組件來(lái)制作跳轉(zhuǎn)鏈接。你需要進(jìn)行更改。

比如我們上節(jié)課作的動(dòng)態(tài)路由新聞頁(yè),你就需要改成下面的鏈接。

<li><nuxt-link :to="{name:'news-id',params:{id:123}}">News-1</nuxt-link></li>

改過(guò)之后你就會(huì)看到動(dòng)畫效果了。

2.單獨(dú)設(shè)置頁(yè)面動(dòng)效

想給一個(gè)頁(yè)面單獨(dú)設(shè)置特殊的效果時(shí),我們只要在css里改變默認(rèn)的page,然后在頁(yè)面組件的配置中加入transition字段即可。例如,我們想給about頁(yè)面加入一個(gè)字體放大然后縮小的效果,其他頁(yè)面沒(méi)有這個(gè)效果。

(1)在全局樣式assets/main.css 中添加以下內(nèi)容

.test-enter-active, .test-leave-active {
 transition: all 2s;
 font-size:12px;
}
.test-enter, .test-leave-active {
 opacity: 0;
 font-size:40px;
}

(2)然后在about/index.vue組件中設(shè)置

export default {
 transition:'test'
}

這時(shí)候就有了頁(yè)面的切換獨(dú)特動(dòng)效了。

總結(jié):在需要使用的頁(yè)面導(dǎo)入即可。

 

第八節(jié):Nuxt的默認(rèn)模版和默認(rèn)布局

在開(kāi)發(fā)應(yīng)用時(shí),經(jīng)常會(huì)用到一些公用的元素,比如網(wǎng)頁(yè)的標(biāo)題是一樣的,每個(gè)頁(yè)面都是一模一樣的標(biāo)題。這時(shí)候我們有兩種方法,第一種方法是作一個(gè)公用的組件出來(lái),第二種方法是修改默認(rèn)模版。這兩種方法各有利弊,比如公用組件更加靈活,但是每次都需要自己手動(dòng)引入;模版比較方便,但是只能每個(gè)頁(yè)面都引入。

1.默認(rèn)模板

Nuxt為我們提供了超簡(jiǎn)單的默認(rèn)模版訂制方法,只要在根目錄下創(chuàng)建一個(gè)app.html就可以實(shí)現(xiàn)了?,F(xiàn)在我們希望每個(gè)頁(yè)面的最上邊都加入“ 學(xué)習(xí)nuxt.js” 這幾個(gè)字,我們就可以使用默認(rèn)模版來(lái)完成。

app.html中:

<!DOCTYPE html>
<html lang="en">
<head>
 {{ HEAD }}
</head>
<body>
 <p>學(xué)習(xí)nuxt.js</p>
 {{ APP }}
</body>
</html>

這里的{{ HEAD }}讀取的是nuxt.config.js里的信息,{{APP}} 就是我們寫的pages文件夾下的主體頁(yè)面了。需要注意的是HEAD和APP都需要大寫,如果小寫會(huì)報(bào)錯(cuò)的。

注意:如果你建立了默認(rèn)模板后,記得要重啟服務(wù)器,否則顯示不會(huì)成功;但是默認(rèn)布局是不用重啟服務(wù)器的。

2.默認(rèn)布局

默認(rèn)模板類似的功能還有默認(rèn)布局,但是從名字上你就可以看出來(lái),默認(rèn)布局主要針對(duì)于頁(yè)面的統(tǒng)一布局使用。它在位置根目錄下的layouts/default.vue。需要注意的是在默認(rèn)布局里不要加入頭部信息,只是關(guān)于<template>標(biāo)簽下的內(nèi)容統(tǒng)一訂制。

需求:我們?cè)诿總€(gè)頁(yè)面的最頂部放入“學(xué)習(xí)nuxt.js” 這幾個(gè)字,看一下在默認(rèn)布局里的實(shí)現(xiàn)。

<template>
 <div>
 <p>學(xué)習(xí)nuxt.js</p>
 <nuxt/>
 </div>
</template>

這里的<nuxt/>就相當(dāng)于我們每個(gè)頁(yè)面的內(nèi)容,你也可以把一些通用樣式放入這個(gè)默認(rèn)布局里,但會(huì)增加頁(yè)面的復(fù)雜程度。

總結(jié):要區(qū)分默認(rèn)模版和默認(rèn)布局的區(qū)別,模版可以訂制很多頭部信息,包括IE版本的判斷;模版只能定制<template>里的內(nèi)容,跟布局有關(guān)系。在工作中修改時(shí)要看情況來(lái)編寫代碼。

 

第九節(jié):Nuxt的錯(cuò)誤頁(yè)面和個(gè)性meta設(shè)置

當(dāng)用戶輸入路由錯(cuò)誤的時(shí)候,我們需要給他一個(gè)明確的指引,所以說(shuō)在應(yīng)用程序開(kāi)發(fā)中404頁(yè)面是必不可少的。Nuxt.js支持直接在默認(rèn)布局文件夾里建立錯(cuò)誤頁(yè)面。

1.建立錯(cuò)誤頁(yè)面

在根目錄下的layouts文件夾下建立一個(gè)error.vue文件,它相當(dāng)于一個(gè)顯示應(yīng)用錯(cuò)誤的組件。

<template>
 <div>
  <h3 v-if="error.statusCode==404">404頁(yè)面不存在</h3>
  <h3 v-else>500服務(wù)器錯(cuò)誤</h3>
  <ul>
   <li><nuxt-link to="/">HOME</nuxt-link></li>
  </ul>
 </div>
</template>
<script>
export default {
 props:['error'],
}
</script>

代碼用v-if進(jìn)行判斷錯(cuò)誤類型,需要注意的是這個(gè)錯(cuò)誤是你需要在<script>里進(jìn)行聲明的,如果不聲明程序是找不到error.statusCode的。

這里我也用了一個(gè)<nuxt-link>的簡(jiǎn)單寫法直接跟上路徑就可以了。

2.個(gè)性meta設(shè)置

頁(yè)面的Meta對(duì)于SEO的設(shè)置非常重要,比如你現(xiàn)在要作個(gè)新聞頁(yè)面,那為了搜索引擎對(duì)新聞的收錄,需要每個(gè)頁(yè)面對(duì)新聞都有不同的title和meta設(shè)置。直接使用head方法來(lái)設(shè)置當(dāng)前頁(yè)面的頭部信息就可以了。我們現(xiàn)在要把New-1這個(gè)頁(yè)面設(shè)置成個(gè)性的meta和title。

1.我們先把pages/news/index.vue頁(yè)面的鏈接進(jìn)行修改一下,傳入一個(gè)title,目的是為了在新聞具體頁(yè)面進(jìn)行接收title,形成文章的標(biāo)題。

/pages/news/index.vue

<li><nuxt-link :to="{name:'news-id',params:{id:123,title:'nuxt.com'}}">News-1</nuxt-link></li>

2.第一步完成后,我們修改/pages/news/_id.vue,讓它根據(jù)傳遞值變成獨(dú)特的meta和title標(biāo)簽。

<template>
 <div>
  <h3>News-Content [{{$route.params.id}}]</h3>
  <ul>
  <li><a href="/" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >Home</a></li>
  </ul>
 </div>
</template>
<script>
export default {
 validate ({ params }) {
 // Must be a number
 return /^\d+$/.test(params.id)
 },
 data(){
 return{
  title:this.$route.params.title,
 }
 },
//獨(dú)立設(shè)置head信息
 head(){
  return{
  title:this.title,
  meta:[
   {hid:'description',name:'news',content:'This is news page'}
  ]
  }
 }
}
</script>

注意:為了避免子組件中的meta標(biāo)簽不能正確覆蓋父組件中相同的標(biāo)簽而產(chǎn)生重復(fù)的現(xiàn)象,建議利用 hid 鍵為meta標(biāo)簽配一個(gè)唯一的標(biāo)識(shí)編號(hào)。

 

第十節(jié):asyncData方法獲取數(shù)據(jù)

Nuxt.js貼心的為我們擴(kuò)展了Vue.js的方法,增加了anyncData,異步請(qǐng)求數(shù)據(jù)。

(1)創(chuàng)建遠(yuǎn)程數(shù)據(jù)

在這里制作一些假的遠(yuǎn)程數(shù)據(jù),我選擇的網(wǎng)站是myjson.com,它是一個(gè)json的簡(jiǎn)單倉(cāng)庫(kù),學(xué)習(xí)使用是非常適合的。 我們打開(kāi)網(wǎng)站,在對(duì)話空中輸入JSON代碼,這個(gè)代碼可以隨意輸入,key和value均采用字符串格式創(chuàng)建。

{
 "name": "Nuxt",
 "age": 18,
 "interest": "I love coding!"
}

輸入后保存,網(wǎng)站會(huì)給你一個(gè)地址,這就是你這個(gè)JSON倉(cāng)庫(kù)的地址了。https://api.myjson.com/bins/1ctwlm

(2)安裝Axios

Vue.js官方推薦使用的遠(yuǎn)程數(shù)據(jù)獲取方式就Axios,所以我們安裝官方推薦,來(lái)使用Axios。這里我們使用npm 來(lái)安裝 axios。 直接在終端中輸入下面的命令:

npm install axios --save

1.ansycData的promise方法

我們?cè)趐ages下面新建一個(gè)文件,叫做ansyData.vue。然后寫入下面的代碼:

<template>
 <div>
  <h2>姓名:{{info.name}}</h2>
  <h3>年齡:{{info.age}}</h3>
  <h3>興趣:{{info.interest}}</h3>
 </div>
</template>
<script>
import axios from 'axios'
export default {
 data(){
  return {
   name:'hello World',
  }
 },
 asyncData(){
  return axios.get('https://api.myjson.com/bins/1ctwlm')
  .then((res)=>{
   console.log(res)
   return {info:res.data}
  })
 }
}
</script>

 這時(shí)候我們可以看到,瀏覽器中已經(jīng)能輸出結(jié)果了。asyncData的方法會(huì)把值返回到data中。是組件創(chuàng)建(頁(yè)面渲染)之前的動(dòng)作,所以不能使用this.info,
 return {info:res.data}相當(dāng)于在data中多了一個(gè)info:''。

2.ansycData的await方法

當(dāng)然上面的方法稍顯過(guò)時(shí),現(xiàn)在都在用ansyc…await來(lái)解決異步,改寫上面的代碼。

<template>
 <div>
  <h2>姓名:{{info.name}}</h2>
  <h3>年齡:{{info.age}}</h3>
  <h3>興趣:{{info.interest}}</h3>
 </div>
</template>
<script>
import axios from 'axios'
export default {
 data(){
  return {
   name:'hello World',
  }
 },
 async asyncData(){
  let {data}=await axios.get('https://api.myjson.com/bins/8gdmr')
  return {info: data}
 }
}
</script>

第十一節(jié):靜態(tài)資源和打包

1.靜態(tài)資源

(1)直接引入圖片
在網(wǎng)上任意下載一個(gè)圖片,放到項(xiàng)目中的static文件夾下面,然后可以使用下面的引入方法進(jìn)行引用

<div><img src="~static/logo.png" /></div>

“~”就相當(dāng)于定位到了項(xiàng)目根目錄,這時(shí)候圖片路徑就不會(huì)出現(xiàn)錯(cuò)誤,就算打包也是正常的。

(2)CSS引入圖片
如果在CSS中引入圖片,方法和html中直接引入是一樣的,也是用“~”符號(hào)引入。

<style>
 .diss{
  width: 300px;
  height: 100px;
  background-image: url('~static/logo.png')
 }
</style>

這時(shí)候在npm run dev 下是完全正常的。

2.打包

用Nuxt.js制作完成后,你可以打包成靜態(tài)文件并放在服務(wù)器上,進(jìn)行運(yùn)行。

在終端中輸入:

npm run generate

然后在dist文件夾下輸入live-server就可以了。

總結(jié):

Nuxt.js框架非常簡(jiǎn)單,因?yàn)榇蟛糠值氖虑樗紴槲覀冏龊昧耍覀冎灰惭b它的規(guī)則來(lái)編寫代碼。

以上所述是小編給大家介紹的Nuxt.js開(kāi)啟SSR渲染的教程詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)億速云網(wǎng)站的支持!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI