【发布时间】:2020-03-16 01:14:11
【问题描述】:
这个问题更像是一个代码组织问题。我是整个前端的新手。我启动了一个由 VueJS + Vuex + VuerRouter + Vuetify + TypeScript 驱动的简单应用程序。这是src 文件夹的视图:
├── App.vue
├── assets
│ └── ...
├── components
│ └── ...
├── plugins
│ └── ...
├── router
│ └── ...
├── services
│ └── StuffAPI.ts
├── store
│ ├── index.ts
│ └── modules
│ └── stuff.ts
└── views
└── Stuff.vue
我在mounted() 上预取了App.vue 中所需的大部分数据:
export default class extends Vue {
listStuffs() {
StuffAPI.list()
.then((stuffs: Stuff[]) => {
this.$store.dispatch("stuff/changeStuffs", stuffs);
})
.catch(e => {
// ...
});
}
mounted() {
this.listStuffs();
}
}
</script>
但是,在某些情况下,组件会更改服务器端的数据(例如,通过创建资源)。现在我需要再次从服务器获取数据。但是,我不想在整个代码库中复制 listStuffs 方法。我该如何解决?我不能从子组件调用父方法。我应该使用自定义事件吗?或者有一个获取数据的 Vuex 操作是否完全没问题?
【问题讨论】:
-
你的声音看起来需要 mixins。 Mixins 是一种为 Vue 组件分配可重用功能的灵活方式
-
如果您已经在使用
Vuex,那么您可能应该将 api 逻辑移动到一个操作中。每当您需要重新获取数据时,都需要再次分派操作。