将数据对象设置为 Vue 3 中 Promise 的值
Set data object to value from Promise in Vue 3
我正在尝试将 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 = ...
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
实例中的 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 = ...
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"
});
}