vue如何实现获取数据时, 再去加载数据?

发布于 2022-09-11 23:51:47 字数 392 浏览 19 评论 0

在vue中, 我需要获取一个字典, 如cityList, 如何做到在获取this.cityList时, 如果cityList没数据, 就去后台获取数据, 否则就返回已获取的数据?

// 类似与这样, cityList还能有双向绑定特性
computed:{
    cityList: {
        get () {
            if (cityList.length) return cityList
            return await getCityListService()
        }
    }
}

难点在如何保持citylist的双向绑定特性, 因为我直接使用proxy去替换get的话, 它的双向绑定也消失了!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

白馒头 2022-09-18 23:51:47

这种需求仅靠computed实现不了,至少需要在data或另外的存储区上维护一个cityList

computed: {
  cityList() {
    if (this._cityList.length) return this._cityList;
    this.getCityListService();
  },
},
data() {
  return {
    _cityList: [],
  };
},
methods: {
  getCityListService() {
    // your code
  },
},
甜扑 2022-09-18 23:51:47

上面的做法也不行,因为没做同步处理

watch: {
  async cityList() {
    if (this._cityList.length) return this._cityList
    let { data } = await this.getCityListService()
    console.log(data, '返回的结果值')
  },
},
data() {
  return {
    _cityList: [],
  };
},
methods: {
  getCityListService() {
    // your code
    return new Promise((resolve, reject) => {
        // 接口处理返回
        
        // 比如
        axios({
            method:"POST",
            url:this.url,
            data:formData,
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        }).then(response => {
            console.log('成功返回数据:', response)
            resolve(response)
        }).catch(error => {
            console.log('失败返回数据:', error)
            reject(error)
        })
        
    })
  },
},
  1. 使得watch监听cityList值变化;
  2. 再使用new Promise进行同步处理,然后使用resolve, reject,返回结果即可
皓月长歌 2022-09-18 23:51:47

这里的 cityList 需要借助另外一个对象完成,这个对象是用来存储请求到的数据,然后使用 computed 属性计算出 cityList即可。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文