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页面中使用
<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下新建一个aMap.js
export default function MapLoader() {
  return new Promise((resolve, reject) => {
      // 全局对象如果存在地图直接将结果抛出
      if (window.AMap) {
          resolve(window.AMap)
      } else {
          // 创建script标签并放入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 = () => {
          // 注入相关插件
          window.AMap.plugin(['AMap.ToolBar', 'AMap.CircleEditor', 'AMap.PolyEditor'], function () {
              //异步同时加载多个插件
              var toolbar = new AMap.ToolBar();
              map.addControl(toolbar);
          });
          // 将结果抛出
          resolve(window.AMap)
      }
  })
}
  • vue页面使用
<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], // [经度,纬度]
          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的基础上对生命周期做了扩展:

export defualt {
  middleware(){ }, // 服务端
  validate(){ },  // 服务端
  asyncData(){ },  // 服务端
  fetch(){ },  // store数据加载
  beforeCreate(){ },  // 服务端和客户端都会执行
  created(){ },  //  服务端和客户端都会执行
  beforeMount(){ }, // 
  mounted(){ } // 客户端
}
  • asyncData(context)
    如果需要服务端渲染,首次渲染时一定要使用这个方法。它可以在渲染组件前异步获取数据。asyncData传入context参数,可以获取一些信息,如:
export default {
  asyncData(ctx){
    ctx.app   // 根实例
    ctx.route   // 路由实例
    ctx.params   // 路由参数
    ctx.query   // 路由问号后的参数
    ctx.error   // 错误处理方法
  }
}

使用这个方法时要注意,如果由于服务器或api错误导致无法渲染,就要做好容错机制,可以使用context.error方法。我们可以这样做:

async asyncData(ctx){
  try {
    throw new Error()
  } catch {
    ctx.error( {statusCode: 500, message: '服务器开小差了~'} ) // 这里的statusCode参数必须是http状态码
  }
}

head()

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

export default {
head: {
    title: '文章页',
    meta: [
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'keywords', name: 'keywords', content: '文章页的关键字' },
      { hid: 'description', name: 'description', content: '文章页的描述' }
    ],
  }
}

打包发布

yarn build  // 打包
yarn start  // 本地运行看是否可运行

package.json.nuxtstaticnuxt.config.js这四个文件上传到服务器,再在服务器运行:

yarn install
yarn start

使用二级路由时刷新路由与数据问题

目录结构

//目录结构
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来控制数据刷新

  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,
    }
  },

切换页面不自动回到顶部问题

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

使用pm2

安装

npm i -g pm2

启用nuxt项目(这个my-nuxt,就是项目名字)

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

常用pm2命令

pm2 list                   # 查看当前正在运行的进程
pm2 start all              # 启动所有应用
pm2 restart all            # 重启所有应用
pm2 stop all               # 停止所有的应用程序
pm2 delete all             # 关闭并删除所有应用
pm2 logs                   # 控制台显示所有日志 
pm2 start 0                # 启动 id为 0的指定应用程序
pm2 restart 0              # 重启 id为 0的指定应用程序
pm2 stop 0                 # 停止 id为 0的指定应用程序
pm2 delete 0               # 删除 id为 0的指定应用程序 
pm2 logs 0                 # 控制台显示编号为0的日志
pm2 show 0                 # 查看执行编号为0的进程
pm2 monit jsyfShopNuxt     # 监控名称为jsyfShopNuxt的进程

设置端口

// package.json
"config": {
    "nuxt": {
      "host": "0.0.0.0",
      "port":"8136"
    }
  }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • 运行图 安装 npx create-nuxt-app project 配置 koa + axios typescr...
    egg_7d1d阅读 6,277评论 0 0
  • 什么是Vue.js Vue.js是目前最火的一个前端框架,React是最流行的一个前端框架,(React除了开发网...
    EEEEsun阅读 619评论 0 1
  • 前段时间刚好公司有项目使用了Nuxt.js来搭建,而刚好在公司内部做了个分享,稍微再整理一下发出来。本文比较适合初...
    fengxianqi阅读 20,203评论 3 22
  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,899评论 1 4
  • webpack基础 什么是webpack?webpack是前端的一个项目构建工具,它是基于Node.js开发出来的...
    7ColorLotus阅读 202评论 0 2