在 Vue 3 中将数据对象设置为来自 Promise 的值

Posted

技术标签:

【中文标题】在 Vue 3 中将数据对象设置为来自 Promise 的值【英文标题】:Set data object to value from Promise in Vue 3 【发布时间】:2020-03-14 12:59:37 【问题描述】:

我正在尝试将Vue 实例中的data() 值设置为从mongodb api 调用返回的Promise 检索到的值。我能够检索我正在尝试实现的数据,但是我很难在 data() 字段中使用它,以便我可以在模板中访问它。

我从vue2 找到的一些解决方案在这种情况下似乎不起作用。提前致谢。

Vue

<template>
  <Article :title=posts[0].title></Article>  // Another Vue component
</template>

let stories;

export default 
       data() 
            return 
                posts: 
            
       ,
        methods: 
            loadPosts() 
                stories = getPosts(); // makes an api request to a mongodb that returns a Promise
                stories.then(function(response) 
                    this.posts = response.posts;
                    console.log(response.posts[0].title); // "My Post Title"
                );

            
        ,
        mounted() 
            this.loadPosts();
        

我收到的错误是

Uncaught (in promise) TypeError: Cannot set property 'posts' of undefined

参考this.posts = ...

【问题讨论】:

【参考方案1】:

this 在使用dynamic 范围时获取window 引用,使用lexical scope binding 获取this 作为Vue

为了您的具体参考和渴望阅读有关范围的更多信息 - 请关注此Static (Lexical) Scoping vs Dynamic Scoping (Pseudocode)

对于词法绑定使用arrow-function

loadPosts() 
  stories = getPosts(); 
  stories.then(response => 
      this.posts = response.posts;
      console.log(response.posts[0].title); // "My Post Title"
  );
 

【讨论】:

以上是关于在 Vue 3 中将数据对象设置为来自 Promise 的值的主要内容,如果未能解决你的问题,请参考以下文章

在 Vue 客户端中将日志文件数据转换为 Json 对象

如何在 JavaScript 中将所有对象属性设置为 null?

在Vue中将echart封装为可复用组件

在 Flutter 中将 JSON 转换为类似于 android 的 POJO(对象)

在 Vue 中将对象属性与子组件同步

在 Javascript 中将对象 Promise 转换为字符串