首页 > 其他分享 >【Vue Router】012-数据获取

【Vue Router】012-数据获取

时间:2023-02-22 21:01:32浏览次数:36  
标签:Vue 获取数据 获取 012 error Router post null 导航


1.12 数据获取

1.12.1 概述

当路由被激活时,我们往往需要从服务器获取数据,以便能够正确地选渲染组件。数据获取的方式有两种,具体使用哪一种取决于应用场景和用户体验。

导航后获取

首先进行导航,然后在导航进入的组建的生命周期钩子中获取数据。在获取数据时显示加载状态。

导航前获取

在 beforeRouteEnter 中获取数据,数据获取后再进行导航;

1.12.2 导航后获取

当你使用这种方式时,我们会马上导航和渲染组件,然后在组件的 created 钩子中获取数据。这让我们有机会在数据获取期间展示一个 loading 状态,还可以在不同视图间展示不同的 loading 状态。

假设我们有一个 ​​Post​​​ 组件,需要基于 ​​$route.params.id​​ 获取文章数据

页面内容

<template>
<div class="post">
<div v-if="loading" class="loading">Loading...</div>

<div v-if="error" class="error">{{ error }}</div>

<div v-if="post" class="content">
<h2>{{ post.title }}</h2>
<p>{{ post.body }}</p>
</div>
</div>
</template>

获取数据的逻辑

export default {
data() {
return {
loading: false,
post: null,
error: null,
}
},
created() {
// watch 路由的参数,以便再次获取数据
this.$watch(
() => this.$route.params,
() => {
this.fetchData()
},
// 组件创建完后获取数据,
// 此时 data 已经被 observed 了
{ immediate: true }
)
},
methods: {
fetchData() {
this.error = this.post = null
this.loading = true
// replace `getPost` with your data fetching util / API wrapper
// 用你的数据获取 util 或 API 替换 `getPost`
getPost(this.$route.params.id, (err, post) => {
this.loading = false
if (err) {
this.error = err.toString()
} else {
this.post = post
}
})
},
},
}

1.12.3 导航前获取

通过这种方式,我们在导航转入新的路由前获取数据。我们可以在接下来的组件的 ​​beforeRouteEnter​​​ 守卫中获取数据,仅当数据获取成功后调用 ​​next​​ 方法

export default {
data() {
return {
post: null,
error: null,
}
},
beforeRouteEnter(to, from, next) {
getPost(to.params.id, (err, post) => {
next(vm => vm.setData(err, post))
})
},
// 路由改变前,组件就已经渲染完了
// 逻辑稍稍不同
async beforeRouteUpdate(to, from) {
this.post = null
try {
this.post = await getPost(to.params.id)
} catch (error) {
this.error = error.toString()
}
},
}

在为后面的视图获取数据时,用户会停留在当前的界面,因此建议在数据获取期间,显示一些进度条或者别的指示。如果数据获取失败,同样有必要展示一些全局的错误提醒。


标签:Vue,获取数据,获取,012,error,Router,post,null,导航
From: https://blog.51cto.com/u_13272819/6079442

相关文章

  • vue3介绍 vue3创建项目 扩展vite setup函数 ref和reactive 计算属性和监听属性 生命周
    目录回顾vue3介绍vue的变化组合式API与配置项APIvue3创建项目扩展之vite使用步骤setup函数ref和reactiverefreative总结:计算属性和监听属性计算属性获取get 修改set监听属......
  • Vue3
    目录Vue3vue3介绍vue3创建项目1.使用vue-cli创建2.vite创建vue项目setup函数1.setup函数2.vue2的创建vue实例和vue3创建vue实例的区别ref和reactivecomputed计算属性watc......
  • vue3 介绍、vue3 创建项目、setup函数、ref和reactive、计算属性和监听属性、生命周期
    目录1vue3介绍2vue3创建项目2.1使用vue-cli2.2vite3setup函数4ref和reactive5计算属性和监听属性5.1计算属性5.2监听属性6生命周期7toRefs8scriptsetup的作......
  • Vue相关笔记
    Promise基本使用Promise是异步编程的一种解决方案,用于一个异步操作的最终完成(或失败)及其结果值的表示,比传统的回调函数方案更加合理。varpromise=newPromise((reso......
  • vue-车辆管理系统结合vue、elementui
    1.展示所有车型列表1.多对多展示用elementui展示后端车型列表:由于后端传过来的数据是数组套对象(经销商和车型是多对多关系,一个车型可以对应多个经销商),我们用普通的ta......
  • Vue急速入门-5
    vue-cli创建项目前端工程化,项目>>>(vue-cli),创建处vue项目,单页面应用(spa)vue-cli创建项目开发,在项目中开发,最后上线,一定要编译 '纯粹的html,js,css'vue-cli工具由于......
  • 178-vue 选项式 API 的script格式
    使用选项式API,我们可以用包含多个选项的对象来描述组件的逻辑,例如data、methods和mounted。选项所定义的属性都会暴露在函数内部的this上,它会指向当前的组件实例。<s......
  • vue3快速上手
    Vue3快速上手1.Vue3简介2020年9月18日,Vue.js发布3.0版本,代号:OnePiece(海贼王)耗时2年多、2600+次提交、30+个RFC、600+次PR、99位贡献者github上的tags地址:https://gi......
  • Vue - 09 Vue3介绍
    目录Vue-09Vue3介绍1.vue31.1介绍1.1组合式API和配置项①vue2:配置项API②vue3:组合式API2Vue3创建项目2.1使用vue-cli创建项目2.2使用vite创建项目使用步骤3......
  • vue3
    1vue3介绍#1vue项目的版本,新项目使用vue3,有部分老项目使用vue2#vue3的变化1.性能的提升 -打包大小减少41% -初次渲染快55%,更新渲染快133% ......