nuxt入门1

领导找了个网站模版,加急制作。拿到手一下,nuxt写的。那我就加急的学习一下吧。
今天记录一下这两天用nuxt开发和学习的一些东西。

先了解一下什么是nuxt。nuxt基于vue的通用框架,预设了利用vue开发服务器(SSR)渲染所有应用的配置;vue是单页面应用,不利于seo搜索引擎操作,而nuxt是利用vue开发多页面应用,在服务器端渲染,比较适合新闻、博客、咨询类的项目,移动端就别考虑使用了。
那么,注意代码兼容性(在不同环境下运行),服务器的负载(过大,比如图表类的)。
SPA用户体验很好,整体js渲染出来,称为CSR;客户端请求会返回一个很小的html结构,渲染html,js,template后,在请求数据后,再完成最终渲染,前后需要两次请求服务端,搜索引擎抓取不到SPA数据。
虽然SPA给服务器减轻负担,它也有缺点:首屏渲染时间长和不利于seo。
(注意:并不是做了SSR我们的页面就不属于SPA应用了,它仍然是一个独立的SPA应用)

开启nuxt项目:

安装:npm install npx -g //(vue5.2之后发布的一个命令)npx 会自动查找当前依赖包中的可执行文件,如果找不到,就会去 PATH 里找。如果依然找不到,就会帮你安装!用完删掉,下次用再临时安装。
npx create-nuxt-app demo

——
Project name // 项目名称
Project description // 项目描述
Use a custom server framework // 选择服务器框架
Choose features to install // 选择安装的特性
Use a custom UI framework // 选择UI框架
Use a custom test framework // 测试框架
Choose rendering mode // 渲染模式
Universal // 渲染所有连接页面
Single Page App // 只渲染当前页面

​客户端请求进入——>服务端通过nuxtServerInit这个命令执行在Store的action中,在这里接收到客户端请求的时候,可以将一些客户端信息存储到Store中,也就是说可以把在服务端存储的一些客户端的一些登录信息存储到Store中——>中间件机制,中间件其实就是一个函数,会在每个路由执行之前去执行,在这里可以做很多事情,或者说可以理解为是路由器的拦截器的作用——>validate执行的时候对客户端携带的参数进行校验——>在asyncData与fetch进入正式的渲染周期,asyncData向服务端获取数据,把请求到的数据合并到Vue中的data中。

——目录结构
└─demo
├─.nuxt // Nuxt自动生成,临时的用于编辑的文件,build
├─assets // 用于组织未编译的静态资源如LESS、SASS或JavaScript,对于不需要通过 Webpack 处理的静态资源文件,可以放置在 static 目录中
├─components // 用于自己编写的Vue组件,比如日历组件、分页组件
├─layouts // 布局目录,用于组织应用的布局组件,不可更改
├─middleware // 用于存放中间件
├─node_modules
├─pages // 用于组织应用的路由及视图,Nuxt.js根据该目录结构自动生成对应的路由配置,文件名不可更改
├─plugins // 用于组织那些需要在 根vue.js应用 实例化之前需要运行的 Javascript 插件。
├─static // 用于存放应用的静态文件,此类文件不会被 Nuxt.js 调用 Webpack 进行构建编译处理。 服务器启动的时 候,该目录下的文件会映射至应用的根路径 / 下。文件夹名不可更改。
└─store // 用于组织应用的Vuex 状态管理。文件夹名不可更改。
├─.editorconfig // 开发工具格式配置
├─.eslintrc.js // ESLint的配置文件,用于检查代码格式
├─.gitignore // 配置git忽略文件
├─nuxt.config.js // 用于组织Nuxt.js 应用的个性化配置,以便覆盖默认配置。文件名不可更改。
├─package-lock.json // npm自动生成,用于帮助package的统一设置的,yarn也有相同的操作
├─package.json // npm 包管理配置文件
├─README.md

——配置文件nuxt.config.js

const pkg = require('./package')
module.exports = {
  mode: 'universal',    
  //  当前渲染使用模式,分为universal和spa,既然是nuxt开发,那就是universal
  // 全局页头配置
  head: {       
  //  页面head配置信息
    title: pkg.name,        //  title
    meta: [       
      { charset: 'utf-8' },
      { name: 'viewport', content: 'width=device-width, initial-scale=1' },
      { hid: 'description', name: 'description', content: pkg.description }
      // 这里可以添加网站验证码信息
      //  { name: 'google-site-verification', content: 'xxx' },
  
    ],
    link: [     
    //  favicon,若引用css不会进行打包处理
      { rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
    ]
  },
  // nuxt 加载进度条配置
  loading: { color: '#fff' },   //  页面进度条
  // 全局css
  css: [    
  //  全局css(会进行webpack打包处理)
    'element-ui/lib/theme-chalk/index.css'  
  ],
   // 配置后,会在页面渲染之前加载
  plugins: [        
  //  插件
    '@/plugins/element-ui'
  ],
  // 工具module
  modules: [       
   //  模块
    '@nuxtjs/axios',
  ],
 // 如果添加了@nuxt/axios则会需要此配置来覆盖默认的一些配置 
  axios: {
    https: true, 
    progress: true, // 是否显示加载进度条
    credentials: true, // 请求携带cookie
    baseURL: 'https://www.abc.top/api',
    proxy: true // 请求代理,开发中跨域问题解决方法
  },
  // 打包配置
  build: {      //  打包
    transpile: [/^element-ui/],
    extend(config, ctx) {       //  webpack自定义配置
    }
  }
}

——nuxt常用配置
1.配置ip和端口
nuxt.config.js

module.exports = {
  server: {
    port: 8080,
    host: '127.0.0.1'
  }
}

或者 package.json

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

2.全局配置css
/assets/css/common.css
nuxt.config.js中 css:[‘~assets/css/normailze.css’],

——Nuxt的路由配置和参数传递
nuxt自动生成路由,用nuxt-link即可。

<nuxt-link :to='/'>...</nuxt-link>   this.$router.push('/');

动态路由:
定义带参数的动态路由,需要创建对应的以下划线作为前缀的 Vue 文件 或 目录。
获取动态参数{{$route.params.id}}

路由传参:
nuxt-link中

方式一
传参:
<nuxt-link :to="{path:'/about',query:{index:id}}" target="_blank" ><nuxt-link>
地址栏显示:
loaclhost:3000/about/id
接收地址栏参数:
this.$route.query.index
 
方式二
传参: 
<nuxt-link target="_blank" :to="{name: 'log-id', params:{id: n.id,key:value}}"></nuxt-link>
地址栏显示:
loaclhost:3000/about/id
接收:
async asyncData ({ params }) { //  params.id 就是我们传进来的值}// 或者 created () { this.$route.params.xxx}`


在方法中

方式一
跳转:
getDescribe(id) {
    // 直接调用$router.push 实现携带参数的跳转
    this.$router.push({
      path: `/describe/${id}`,
    })   
接收:
$route.params.id

方式 二
注意:
页面之间的跳转使用query 不然的话刷新页面后会找不到参数
跳转:
 this.$router.push({
          path: '/describe',
          query: {
            id: id
          }
})
接收:
$route.query.id

动态路由校验,参数是否有效

export default {
  // 这个方法必须返回一个布尔值,为true表示校验通过,为false表示校验失败。
  //注意validate不能写到methods属性中。
  validate(obj) {
    return /^\d+$/.test(obj.params.id)
  }
}

路由嵌套:
(未完…)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗罗666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值