Vue获取数据的方法 - 极悦
首页 课程 师资 教程 报名

Vue获取数据的方法

  • 2022-05-31 09:17:25
  • 2879次 极悦

数据获取

有时您需要在激活路由时从服务器获取数据。例如,在呈现用户配置文件之前,您需要从服务器获取用户数据。我们可以通过两种不同的方式实现这一点:

导航后获取

首先执行导航,并在传入组件的生命周期钩子中获取数据。在获取数据时显示加载状态。

Fetching Before Navigation : 在路由进入守卫中导航前获取数据,获取数据后进行导航。

从技术上讲,两者都是有效的选择 - 它最终取决于您的目标用户体验。

导航后获取#使用这种方法时,我们会立即导航和渲染传入的组件,并在组件的created钩子中获取数据。它使我们有机会在通过网络获取数据时显示加载状态,并且我们还可以为每个视图处理不同的加载。

假设我们有一个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 the params of the route to fetch the data again
    this.$watch(
      () => this.$route.params,
      () => {
        this.fetchData()
      },
      // fetch the data when the view is created and the data is
      // already being observed
      { immediate: true }
    )
  },
  methods: {
    fetchData() {
      this.error = this.post = null
      this.loading = true
      // replace `getPost` with your data fetching util / API wrapper
      getPost(this.$route.params.id, (err, post) => {
        this.loading = false
        if (err) {
          this.error = err.toString()
        } else {
          this.post = post
        }
      })
    },
  },
}

导航前获取

通过这种方法,我们在实际导航到新路线之前获取数据。我们可以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))
    })
  },
  // when route changes and this component is already rendered,
  // the logic will be slightly different.
  async beforeRouteUpdate(to, from) {
    this.post = null
    try {
      this.post = await getPost(to.params.id)
    } catch (error) {
      this.error = error.toString()
    }
  },
}

在为传入视图获取资源时,用户将停留在前一个视图上。因此,建议在获取数据时显示进度条或某种指示器。如果数据获取失败,还需要显示某种全局警告消息。

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交