vue.js - 计算属性需要等待异步数据
问题描述
export default {
data() {
return {
projects: []
}
},
mounted() {
axios.get('...')
.then(({ data } => this.projects = data)
},
computed: {
personalProjects() {
return this.projects.filter(...)
},
commercialProjects() {
return this.projects.filter(...)
}
}
}
计算的属性需要等待从服务器获取项目,然后再设置数据。这样做的正确方法是什么?
我试过这个:
watch: {
projects() {
this.personalProjects = this.projects.filter(project => project.type === 'personal')
this.commercialProjects = this.projects.filter(project => project.type === 'commercial')
}
},
但我收到一条错误消息:Computed property "personalProjects" was assigned to but it has no setter.
我应该设置personalProjects
并commercialProjects
改为data()
吗?
解决方案
您目前正在做的是正确的方法。计算属性是反应性的、派生的属性。projects
每当数据请求更新时,它们都会进行响应式更新。
本质上,您的组件的逻辑从没有项目开始,[]
如果有人要求个人或商业项目,他们会得到正确的结果:两者都没有,[]
.
但是,无论何时安装组件,它都会开始加载实际项目的过程,并且无论何时完成,整个依赖关系图projects
都会被响应更新,这意味着personalProjects
将提供正确的结果。
推荐阅读
- html - 如何在 HTML 视图中显示 AngularJS 控制器数据?
- php - 您可以将变量添加到文件路径吗?
- graphql - 错误消息:更新 GraphQL 架构时实例数据无效
- firebase - 有没有办法从 firebase -> bigquery 导出数据更改归因模型?
- dependency-injection - NestJs:动态创建类的实例
- kibana - 如何对度量可视化的拆分组进行排序?
- firebase - Firebase 动态链接如何决定返回社交元数据而不是重定向流
- json - 如何在本地文件系统中将嵌套的 Dart 模型(和列表)保存为 JSON
- google-apps-script - 从 Google 表格复制到 Google 文档,无需更改格式
- php - 邮箱收到时如何隐藏回复标题?