nuxt.js使用筆記

安裝
yarn create nuxt-app my-project

中文文檔

引用scss
yarn add node-sass sass-loader --save-dev

"node-sass": "^4.12.0",
"sass-loader": "^10.1.1"
  • vue頁(yè)面中使用
<style lang="scss">
</style>
  • 全局引用
// nuxt.config.js 
css: [
    '@/assets/style/index.scss' // scss文件所在路徑
  ],

引用高德地圖

  • 引入script
// nuxt.config.js 
script: [
    {src: 'http://webapi.amap.com/maps?v=1.3&key=**********' }
  ],
  • plugins下新建一個(gè)aMap.js
export default function MapLoader() {
  return new Promise((resolve, reject) => {
      // 全局對(duì)象如果存在地圖直接將結(jié)果拋出
      if (window.AMap) {
          resolve(window.AMap)
      } else {
          // 創(chuàng)建script標(biāo)簽并放入cdn鏈接
          var script = document.createElement('script')
          script.type = 'text/javascript'
          script.async = true
          script.src = 'http://webapi.amap.com/maps?v=1.3&key=your key&callback=initAMap'
          script.onerror = reject
          document.head.appendChild(script)
      }
      window.initAMap = () => {
          // 注入相關(guān)插件
          window.AMap.plugin(['AMap.ToolBar', 'AMap.CircleEditor', 'AMap.PolyEditor'], function () {
              //異步同時(shí)加載多個(gè)插件
              var toolbar = new AMap.ToolBar();
              map.addControl(toolbar);
          });
          // 將結(jié)果拋出
          resolve(window.AMap)
      }
  })
}
  • vue頁(yè)面使用
<div id="container" class="map">
import MapLoader from '@/plugins/aMap'
  mounted() {
    let that = this
      MapLoader().then(AMap => {
        that.map = new AMap.Map('container', {
          center: [121.42, 31.2371], // [經(jīng)度,緯度]
          resizeEnable: true,
          zoom: 17
        })
        // 矢量圖形
        var circle = new AMap.Circle({
          center: new AMap.LngLat(121.42, 31.2371), // 圓心位置
          radius: 100, // 圓半徑
          fillColor: '#3ebff191', // 圓形填充顏色
          strokeColor: '#fff', // 描邊顏色
          strokeWeight: 2// 描邊寬度
        })
        that.map.add(circle)
      })
  },

生命周期

Nuxtvue的基礎(chǔ)上對(duì)生命周期做了擴(kuò)展:

export defualt {
  middleware(){ }, // 服務(wù)端
  validate(){ },  // 服務(wù)端
  asyncData(){ },  // 服務(wù)端
  fetch(){ },  // store數(shù)據(jù)加載
  beforeCreate(){ },  // 服務(wù)端和客戶(hù)端都會(huì)執(zhí)行
  created(){ },  //  服務(wù)端和客戶(hù)端都會(huì)執(zhí)行
  beforeMount(){ }, // 
  mounted(){ } // 客戶(hù)端
}
  • asyncData(context)
    如果需要服務(wù)端渲染,首次渲染時(shí)一定要使用這個(gè)方法。它可以在渲染組件前異步獲取數(shù)據(jù)羽资。asyncData傳入context參數(shù)桶唐,可以獲取一些信息摊腋,如:
export default {
  asyncData(ctx){
    ctx.app   // 根實(shí)例
    ctx.route   // 路由實(shí)例
    ctx.params   // 路由參數(shù)
    ctx.query   // 路由問(wèn)號(hào)后的參數(shù)
    ctx.error   // 錯(cuò)誤處理方法
  }
}

使用這個(gè)方法時(shí)要注意犀被,如果由于服務(wù)器或api錯(cuò)誤導(dǎo)致無(wú)法渲染厕倍,就要做好容錯(cuò)機(jī)制昏鹃,可以使用context.error方法尚氛。我們可以這樣做:

async asyncData(ctx){
  try {
    throw new Error()
  } catch {
    ctx.error( {statusCode: 500, message: '服務(wù)器開(kāi)小差了~'} ) // 這里的statusCode參數(shù)必須是http狀態(tài)碼
  }
}

head()

用于更新頭部信息title/descripe等

export default {
head: {
    title: '文章頁(yè)',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'keywords', name: 'keywords', content: '文章頁(yè)的關(guān)鍵字' },
      { hid: 'description', name: 'description', content: '文章頁(yè)的描述' }
    ],
  }
}

打包發(fā)布

yarn build  // 打包
yarn start  // 本地運(yùn)行看是否可運(yùn)行

package.json.nuxt洞渤、static阅嘶、nuxt.config.js這四個(gè)文件上傳到服務(wù)器,再在服務(wù)器運(yùn)行:

yarn install
yarn start

使用二級(jí)路由時(shí)刷新路由與數(shù)據(jù)問(wèn)題

目錄結(jié)構(gòu)

//目錄結(jié)構(gòu)
pages 
   product
      index.vue
   product.vue

在product.vue里

<template>
  <div>
    <nuxt-child :key="key" />
  </div>
</template>
<script>
export default {
  computed: {
    key() {
      return this.$route.path + Math.random();
    }
  }
}
</script>

在index.vue里使用watchQuery來(lái)控制數(shù)據(jù)刷新

  watchQuery: true,
  watchQuery: ['id'], // 此id為路由里query里的屬性
  async asyncData({ query }) {
    let [productInfo, carouselList] = await Promise.all([
      product_info(query),
      carousel_list({ type: 1 }),
    ])
    return {
      productInfo: productInfo.data,
      carouselList: carouselList.data,
    }
  },

切換頁(yè)面不自動(dòng)回到頂部問(wèn)題

// nuxt.config.js 
router: {
    scrollBehavior(to, from, savedPosition) {
      return { x: 0, y: 0 }
    }
  }

使用pm2

安裝

npm i -g pm2

啟用nuxt項(xiàng)目(這個(gè)my-nuxt,就是項(xiàng)目名字)

pm2 start npm --name "my-nuxt" -- run start

常用pm2命令

pm2 list                   # 查看當(dāng)前正在運(yùn)行的進(jìn)程
pm2 start all              # 啟動(dòng)所有應(yīng)用
pm2 restart all            # 重啟所有應(yīng)用
pm2 stop all               # 停止所有的應(yīng)用程序
pm2 delete all             # 關(guān)閉并刪除所有應(yīng)用
pm2 logs                   # 控制臺(tái)顯示所有日志 
pm2 start 0                # 啟動(dòng) id為 0的指定應(yīng)用程序
pm2 restart 0              # 重啟 id為 0的指定應(yīng)用程序
pm2 stop 0                 # 停止 id為 0的指定應(yīng)用程序
pm2 delete 0               # 刪除 id為 0的指定應(yīng)用程序 
pm2 logs 0                 # 控制臺(tái)顯示編號(hào)為0的日志
pm2 show 0                 # 查看執(zhí)行編號(hào)為0的進(jìn)程
pm2 monit jsyfShopNuxt     # 監(jiān)控名稱(chēng)為jsyfShopNuxt的進(jìn)程

設(shè)置端口

// package.json
"config": {
    "nuxt": {
      "host": "0.0.0.0",
      "port":"8136"
    }
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市讯柔,隨后出現(xiàn)的幾起案子抡蛙,更是在濱河造成了極大的恐慌,老刑警劉巖魂迄,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粗截,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡捣炬,警方通過(guò)查閱死者的電腦和手機(jī)熊昌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)湿酸,“玉大人婿屹,你說(shuō)我怎么就攤上這事⊥评#” “怎么了昂利?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)铁坎。 經(jīng)常有香客問(wèn)我蜂奸,道長(zhǎng),這世上最難降的妖魔是什么厢呵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任窝撵,我火速辦了婚禮傀顾,結(jié)果婚禮上襟铭,老公的妹妹穿的比我還像新娘。我一直安慰自己短曾,他們只是感情好寒砖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著嫉拐,像睡著了一般哩都。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上婉徘,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天漠嵌,我揣著相機(jī)與錄音,去河邊找鬼盖呼。 笑死儒鹿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的几晤。 我是一名探鬼主播约炎,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了圾浅?” 一聲冷哼從身側(cè)響起掠手,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎狸捕,沒(méi)想到半個(gè)月后喷鸽,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡府寒,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年复颈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了斗遏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖督勺,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棍辕,我是刑警寧澤舶沛,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站炮姨,受9級(jí)特大地震影響捌刮,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜舒岸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一绅作、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蛾派,春花似錦俄认、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至壳澳,卻和暖如春岂贩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背巷波。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工萎津, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抹镊。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓锉屈,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親髓考。 傳聞我的和親對(duì)象是個(gè)殘疾皇子部念,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 運(yùn)行圖 安裝 npx create-nuxt-app project 配置 koa + axios typescr...
    egg_7d1d閱讀 6,277評(píng)論 0 0
  • 什么是Vue.js Vue.js是目前最火的一個(gè)前端框架,React是最流行的一個(gè)前端框架,(React除了開(kāi)發(fā)網(wǎng)...
    EEEEsun閱讀 615評(píng)論 0 1
  • 前段時(shí)間剛好公司有項(xiàng)目使用了Nuxt.js來(lái)搭建儡炼,而剛好在公司內(nèi)部做了個(gè)分享妓湘,稍微再整理一下發(fā)出來(lái)。本文比較適合初...
    fengxianqi閱讀 20,202評(píng)論 3 22
  • ## 框架和庫(kù)的區(qū)別?> 框架(framework):一套完整的軟件設(shè)計(jì)架構(gòu)和**解決方案**乌询。> > 庫(kù)(lib...
    Rui_bdad閱讀 2,895評(píng)論 1 4
  • webpack基礎(chǔ) 什么是webpack榜贴?webpack是前端的一個(gè)項(xiàng)目構(gòu)建工具,它是基于Node.js開(kāi)發(fā)出來(lái)的...
    7ColorLotus閱讀 202評(píng)論 0 2