nuxt.js页面布局和异步请求数据

在这里插入图片描述

开门见山
本篇文章主要是介绍nuxt.js页面布局和异步请求数据,希望可以帮助到大家
页面布局
其实就是在项目的根目录下,新建一个layout目录,里面的文件可以作为项目的模板文件
在组件内有一个选项可以作为引用的模板,举例如下
layouts 文件夹,新建default.vue内容如下
<template>
  <div class="">
    <h2>Layouts / default.vue组件</h2>
    <!-- 页面出口相当于子路由 -->
    <nuxt />
  </div>
</template>

<script>
export default {
  name: "layoutsDefault",
  components: {},
  data() {
    return {};
  },
  computed: {},
  methods: {},
  mounted() {},
};
</script>

<style lang='scss' scoped>
//@import url()
</style>
这样的的话所有的页面文件都会加载默认的模板
如果想在组件内使用其他模板的话,组件内部版有一个选项layout:"" 
填入layouts文件夹内部的,模板名称即可
异步请求数据
如何或许异步渲染服务端页面主要使用asyncData()函数

nuxt.js扩展Vue.js,增加了一个叫做asyncData的方法,使得我们可以在设置组件的数据之前

能异步获取或处理数据
基本用法:

1、它会将asyncData返回的数据融合组件data方法返回数据一并给组件使用,也就是可以 通过 return {data} ,data组件中使用

2、调用时机:服务端渲染期间和客户端路由更新之前

注意事项

1、只能在页面组件中使用,也就是pages文件夹下的vue文件中使用,非页面组件无法调用asyncData方法

2、没有this,因为它是组件初始化之前被调用的

如果想要动态页面内容有利于SEO,或者是提升首屏渲染速度的时候,就在asyncData中发起请求

如果是非异步数据或者普通数据,则正常初始化data中即可
异步数据上下文对象
我在这里描述一个情况,动态路由携带参数,页面通过参数发起请求但是,无法通过this.$route.params拿到参数,
那么问题来了,该怎么操作数据呢,这里就通过异步数据上下文对象,来解决这个问题具体代码演示如下,
//这里嵌套的子路由,在这里要发起请求
  async asyncData (context) {
    console.log(context)//打印上下文对象
    const { data } = await axios({
      method: 'GET',
      url: 'http://localhost:3000/data.json'//本地的模拟数据
    })
    const id = Number.parseInt(context.params.id)
    return {
      article: data.posts.find(item => item.id === id)
    }
  }
<!--页面展示 -->
<template>
  <div>
    <h1>{{ article.title }}</h1>
    <div>{{ article.body }}</div>
  </div>
</template>

谢谢观看,如有不足,敬请指教

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值