当前位置: 首页 > 知识库问答 >
问题:

javascript - 如何在Vue.js中处理异步数据加载和渲染?

董建茗
2023-12-26

一个select框组件,其中的数据是从后端返回的,打开这个组件时往里传入了value值,但是页面打开时也会显示这个value值,等后端结果返回才能显示对应的label值,如何让组件先不渲染value直接渲染label?

将请求的生命周期放在async created中没用

共有4个答案

邹杰
2023-12-26

我的思路是,子组件内部先根据option的长度判定是否传给Select组件value,当option为空的时候,传给它undefined,然后通过Select的change事件emit数据给父组件,你的单选联动可以在单选改变之后,调子组件的获取options方法

<template>  <el-select :value="selectVal" @change="handleChange">    <el-option v-for="item in selectOptions" :key="item.value" :label="item.label" :value="item.value" />  </el-select></template><script>export default {  props: ['value'],  emits: ['update:value'],  data() {    return {      selectOptions: [],    }  },  computed: {    selectVal() {      return this.selectOptions.length ? this.value : undefined    }  },  created() {    this.getOptions()  },  methods: {    async getOptions() {      this.selectOptions = []      // 异步请求任务      // awati axios(...)      this.selectOptions = [        { value: 'Option1', label: 'Option1', },        { value: 'Option2', label: 'Option2', },      ]    },    handleChange(e) {      this.$emit('update:value', e)    }  }}</script>
宰父疏珂
2023-12-26
<template>  ...  <span v-if="loading"> loading</span>  <Select v-else :value="value">    <Option v-for="item in options" :label="item.label" :value="item.value"></Option>  </Select>  ...  </template>  <script>  export default {    data() {      return {        options: [],        value: null,        loading: false      }    },    created() {      this.handleGetOptions()    },    methods: {      async handleGetOptions() {        this.options = []        this.loading = true        try {          let res = await this.$api.get('api/v1/options')          this.options = res.data        } catch (error) {          console.log(error)        } finally {          this.loading = false        }      }    }  }  </script>

加个loading遮罩,等请求完了再显示select

宰父跃
2023-12-26

页面打开和打开组件是同一个操作吗,页面打开时有赋值value吗

郭思聪
2023-12-26

哎,我研究了好久,最后我的解决方案是父组件监听每个子组件的change,子组件获取数据之后再emit值,父组件监听到之后查一下是不是已返回的组件数=所有组件数了
下面是父组件的代码

callback() {      if (!this.searchTpl) return;      if (Object.keys(this.options).length < this.searchTpl.length) return;      const optionMap = new Map()      for (let o in this.options) {        optionMap.set(o, this.options[o])      }      const query = []      for (let item of this.searchTpl) {        item.value = optionMap.get(item.field.toString())        query.push(item)      }      this.$parent.query = query;      this.$parent.getList()    },
 类似资料:
  • 这是方法体 这是在created调用这个方法 问题: 通过这个方法获取的数据,我在这个方法的.then后面进行console对res.rows进行输出时,数据是存在的。 将这个Patientdata变量加载进页面时 数据也是存在的。 但是我现在想在created或者是mounted对Patientdata数据进行操作后再加载进页面内,在写操作数据的方法时,发现怎么都获取不到Patientdata的

  • 本文向大家介绍Javascript vue.js表格分页,ajax异步加载数据,包括了Javascript vue.js表格分页,ajax异步加载数据的使用技巧和注意事项,需要的朋友参考一下 分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理。 效果: 代码: 1.注册一个组件 js 模板: HTML: 当点击分页链接的时候

  • 布局偏移该怎么解决? 初始加载页面的时候,需要先请求数据,然后再显示。此时就会出现一个问题,在请求未响应的时候数据为空,显示区域未空,当得到数据之后,显示区域数据扩充,这就造成了数据便宜。 该显示区域的大小由数据决定,不能设置一个固定的大小。 我想如果可以在挂载之前获取这个数据的话,应该可以避免这个布局偏移。但是获取数据的操作是异步的,不会等待获取完之后再挂载。或者说在路由跳转的时候获取这个数据。

  • 本文向大家介绍vue.js 表格分页ajax 异步加载数据,包括了vue.js 表格分页ajax 异步加载数据的使用技巧和注意事项,需要的朋友参考一下 Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。 分页一般和表格一起用,分页链接作为表格的一部分,将分页链接封装成一个独立的组件,然后作为子组件嵌入到表格组件中,这样比较合理。 1.注册一个组件 js 模板: H

  • 主要内容:echarts_test_data.json 数据:,实例,实例,实例ECharts 通常数据设置在 setOption 中,如果我们需要异步加载数据,可以配合 jQuery等工具,在异步获取数据后通过 setOption 填入数据和配置项就行。 ECharts 通常数据设置在 setOption 中,如果我们需要异步加载数据,可以配合 jQuery等工具,在异步获取数据后通过 setOption 填入数据和配置项就行。 json 数据: echarts_test_

  • 问题内容: 我有很多关于在Android应用程序中处理异步数据库的问题。 由于我知道数据库是异步的,因此我尝试了几种方法来处理它。如您在代码中所见,我有两个函数需要在数据库中使用数组。我的第一个函数()将对数据库中的数组应用更改,而我的第二个函数()需要将此数组与从我的第一个函数中应用的更改一起使用。这是我的代码: 这是setArray_for_database的代码: 这是我的把戏。具有另一个内