nuxt.js核心讲解,看完即可上手真实项目

2 篇文章 0 订阅

首先按照文档创建好项目 我一般喜欢选择安装vantui这个UI,不得不说这个UI库真的太好用了。

直接说重点,项目中最常用的
1. 关于css 的引用,
比如我们使用animate.css这是一个特别好的动画css.
根据自己的爱好,我一般喜欢在跟目录建立assets文件夹 里面建立一个css 如下
在这里插入图片描述

然后直接在nuxt.config.js的css中引用

  // Global CSS: https://go.nuxtjs.dev/config-css
  css: [
    'vant/lib/index.css',
    '@/assets/css/animate.min.css',
  ],

这样我们就完成了公用的css使用

使用方式
在任意组建中 例如

  <h1 class="animated fadeInDown">
        Welcome to the Vant + Nuxt.js template
  </h1>

animated 必须的 后面 fadeInDown动画效果 可以根据官方文档使用自己喜欢的动画

2.在nuxt中使用axios
这里有几种方式 举一种来说

  1. 安装依赖npm i @nuxtjs/axios -s
  2. nuxt.config.js中配置axios
modules: [
      '@nuxtjs/axios',
  ],

此时其实我们就可以在组建中来使用了 asyncData 上下文中就有$axios , 其中提供了很多方法$get $post $put 可以自己打印出来看一下
3.对网络请求拦截进行封装
plugins下建立一个js 名字随意 axios.js

将axios.js添加到nuxt.config.js中,全局使用上面配置

 plugins: [
      '~/plugins/axios',
  ],

>  axios.js 如下

export default function ({ $axios,redirect}) {
	$axios.defaults.baseURL = '';
	$axios.defaults.timeout = 5000;
    $axios.interceptors.request.use(
        config => {
         console.log("拦截后")
          return config
        },
        error => {
        
          return Promise.reject(error)
        }
      )

	$axios.interceptors.response.use(response => {
        console.log("拦截后")
		return response;
	}, err => {
		const errRes = err.response
		//根据自己的逻辑判断
		if ((errRes.data.code == 2008 || errRes.data.code == 400)) {
			return Promise.resolve(err)
		} else {
			return Promise.reject(err)
		}
	})
}

此时我们发送的所以请求就能被正常拦截到

3.vuex的使用
首先我们看文档

Nuxt.js 会尝试找到 src 目录(默认是应用根目录)下的 store 目录,如果该目录存在,它将做以下的事情:

引用 vuex 模块 将 vuex 模块 加到 vendors 构建配置中去 设置 Vue 根实例的 store 配置项 Nuxt.js
支持两种使用 store 的方式,你可以择一使用:

模块方式: store 目录下的每个 .js 文件会被转换成为状态树指定命名的子模块 (当然,index 是根模块)
Classic(不建议使用): store/index.js返回创建 Vuex.Store 实例的方法。
无论使用那种模式,您的state的值应该始终是function,为了避免返回引用类型,会导致多个实例相互影响。

说白了也就是在store目录下直接建立js文件, 框架自动帮你转移成传统的那种形式,我们只要导出即可(个人了解可能不到位)
几个例子说明 TEST.js为例

TEST.js

export const state = () => ({
    age:0
  })
  export const mutations = {
    CHANGE_AGE(state,val){
        state.age = val;
    },
    SET_AGE(state,val){
        state.age = val;
    }  
  }
  export const actions = {
       anCAge({ commit },data) {
        commit('SET_AGE',data)
      }
  };
  
  

我们定义一个age字段默认值为0

需求当在 asyncData 阶段 需要帮age修改成25

直接在组建中修改

   asyncData({ query, $axios,store }) {
             //在 asyncData中来修改store中的值
             store.commit('TEST/CHANGE_AGE', 25)
    },

从这理不难看出我们不需要像vue 项目那样,将vuex按照模块拆分,在nuxt.js中直接建立需要的js即可

commit 是直接修改值,我们也可以使用 `dispatch` 的方式来修改

组建中假如有个button 这里使用的vant ui

  <van-button type="info" @click="changefn1">修改vuex数据</van-button>

在组建的 methods

    methods: {
          changefn1(){
                this.$store.dispatch('TEST/anCAge',30)
          },

      },

这里有个小细节,可能眨眼一看没有看懂

   asyncData({ query, $axios,store })  为什么一些地方写的是    asyncData(context)   

不难看出其实context 上下文是一个对象,里面包含着vue 的很多实例。换句话来说,用{}的形式也就是帮context结构出来(es6的方式)
context中的实例
在这里插入图片描述
4.数据的服务端渲染
说白了就是将数据 在asyncData 赋值 return出去
几个例子 我们需要渲染一个列表 ,查看源代码我们是能看到列表标签文字的,则就是服务端渲染,(用以前的接口测似)
index.vue组建中

watchQuery  监听路由参数变化
<template>
  <div class="container">
    <div>

    
      <ul>
        <li v-for="(item,index) in list" :key="index">
          {{index}}  {{item.title}}
        </li>
      </ul>
    </div>

   <van-button type="info" @click="changePage(2)">第二页</van-button>

  </div>
</template>

export default {
   name: 'IndexPage',
   watchQuery: true, 
    async asyncData({ query, $axios,store }) {
       try {
             let  {pageNo} = query;
            const res= await $axios.$get(`/article/articlePage?siteId=20&siteCode=20&moduleId=36&moduleCode=32-36&pageSize=5&pageNo=${pageNo||1}`)
            return {list: res.data}
       } catch (error) {
         
       }
    },

      methods: {
          changePage(e){
                this.$router.push({path:'/',query:{pageNo:e}})  
          },
       
      },
      created:function(){
      
      }
 
}
</script>

asyncData 中return出去的东西,其实就相当于以前data里面的东西,我们在模板上直接使用
从上面的请求中我们看出 我们点击跳转第二页 直接调用 methods 中的 changePage 方法,路由参数一变化,页面重新加载依次,又加载了asyncData声明周期 query 中的 分页参数pageNo:e变成2

默认的时候我们是写了一个默认值1 ${pageNo||1} 有值就是对应的值,没有就是1

只需要弄懂asyncData 这个东西,其他的跟vue都一样

5.其他砸项目

列举几个

1.  $nuxt     当用户互联网连接变为离线时触发

使用方式

layouts/default.vue:

<template>
  <div>
    <div v-if="$nuxt.isOffline">网络一断开</div>
    <nuxt />
  </div>
</template>

2.组建的使用,在nuxt中组建我们不需要引用

components 下面建立一个NuxtLogo.vue组建

使用

index.vue中   直接使用          <NuxtLogo />

3.head 每个页面都可以设置单独的 head

<template>
  <h1>{{ title }}</h1>
</template>

<script>
  export default {
    data() {
      return {
        title: 'Hello World!'
      }
    },
    head() {
      return {
        title: this.title,
        meta: [
          {
            hid: 'description',
            name: 'description',
            content: 'My custom description'
          }
        ]
      }
    }
  }
</script>

其他就不一一列举,用到自己看看文档

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
为什么要学习服务端渲染 nuxt.js ? 现在我们的项目大多数都是SPA(单页面应用),在实际开发过程中单页面应用比之前的模板渲染要好很多,首先单页面应用是前后端分离,架构清晰,前端负责交互逻辑,后端负责数据,前后端单独开发,独立测试。但是,SPA不利于SEO(搜索引擎优化)。让搜索引擎更为信任该网站,通过提升排名获得更多网站流量,对于某些类型的网站是非常有必要的。目前大部分的Vue项目本质是 SPA 应用,React、Angular也都是SPA应用。SPA应用广泛用于对SEO要求不高的场景中。在我们开发的过程中,我们有 SEO 的需求,我们需要搜索引擎更多地抓取到我们的项目内容,此时我们需要SSR。SSR保证用户尽快看到基本的内容,也使得用户体验性更好。 Nuxt.js 是一个 Node 程序,基于vue.js开发的一套服务端渲染的框架,必须使用 Node 环境。我们对 Nuxt.js 应用的访问,实际上是在访问这个 Node.js 程序的路由,程序输出首屏渲染内容 + 用以重新渲染的 SPA 的脚本代码,而路由是由 Nuxt.js 约定好的 pages 文件夹生成的,开发只需要遵循一定的约定,直接使用vue.js开发我们项目也是非常轻松的。 课程案例 (1) HOME PAGE (2) Jokes Page  (3)About Page  课程概述 在本课程中,大喵将使用 nuxt.js + bootstrapVue + json-server 开发实战性质一个入门级项目,带着大家来体验服务端渲染(SSR )项目构建的过程;介绍 nuxt.js项目目录的结构,每个文件夹和文件的基本概念和作用,以及nuxt.config.js 配置文件的基本介绍;页面公共结构处理,路由页面跳转配置处理;axios 接口请求;带着大家来熟悉及掌握 bootstrapVue UI组件库的使用;

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

1登峰造极

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

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

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

打赏作者

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

抵扣说明:

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

余额充值