技术文摘
Vue 3数据编辑页返回列表页数据未刷新的解决方法
2025-01-09 12:40:06 小编
在Vue 3项目开发过程中,经常会遇到数据编辑页返回列表页时数据未刷新的问题,这给用户体验带来了一定的影响。下面就为大家详细介绍几种有效的解决方法。
可以使用事件总线(Event Bus)来解决。创建一个全局的事件总线实例,在编辑页完成数据编辑后,通过事件总线触发一个自定义事件。例如:
// 创建eventBus.js
import Vue from 'vue';
export const eventBus = new Vue();
// 在编辑页
import { eventBus } from '@/eventBus';
export default {
methods: {
saveAndBack() {
// 保存数据逻辑
eventBus.$emit('dataUpdated');
// 返回列表页逻辑
}
}
}
// 在列表页
import { eventBus } from '@/eventBus';
export default {
created() {
eventBus.$on('dataUpdated', () => {
this.fetchData(); // 重新获取数据的方法
});
},
methods: {
fetchData() {
// 从接口获取数据逻辑
}
}
}
Vuex也是一个不错的选择。将列表数据存储在Vuex的state中,在编辑页修改数据后,通过mutations和actions更新Vuex中的数据。当返回列表页时,由于列表页依赖Vuex中的数据,会自动重新渲染。
// store.js
import { createStore } from 'vuex';
export default createStore({
state: {
listData: []
},
mutations: {
updateListData(state, newData) {
state.listData = newData;
}
},
actions: {
async editData({ commit }, data) {
// 调用接口保存编辑数据
const res = await api.editData(data);
if (res) {
const newListData = await api.getListData();
commit('updateListData', newListData);
}
}
}
});
// 在编辑页
import { useStore } from 'vuex';
export default {
methods: {
async saveAndBack() {
const store = useStore();
await store.dispatch('editData', this.formData);
// 返回列表页逻辑
}
}
}
// 在列表页
import { useStore } from 'vuex';
export default {
computed: {
listData() {
return this.$store.state.listData;
}
}
}
最后,还可以利用路由守卫。在列表页的路由守卫中,每次进入该路由时重新获取数据。
// router.js
import { createRouter, createWebHistory } from 'vue-router';
const router = createRouter({
history: createWebHistory(),
routes: [
{
path: '/list',
component: ListPage,
beforeEnter: async (to, from, next) => {
const listPage = new ListPage();
await listPage.fetchData();
next();
}
}
]
});
通过以上几种方法,能够有效解决Vue 3数据编辑页返回列表页数据未刷新的问题,提升项目的用户体验和开发效率。
- 5个技巧提升博客视觉美感,让你的博客焕然一新
- JavaScript事件绑定传参方法:事件处理程序传参技巧
- 怎样简化五子棋机器人代码
- CSS实现数字或图标在文本末尾且小字号居中显示的方法
- DataTables中为JSON数据添加序号字段的方法
- 解决 span 标签高度无法自动撑开致单元格高度不一致的方法
- 弟弟元素设置 `display:inline-block` 可防止 margin 塌陷的原因
- 窗体加载时通过radio事件触发选中状态的方法
- HTML 中怎样禁止使用 Ctrl+滚轮进行放大缩小
- CSS Flex 布局里 padding-right 无效的缘由与解决办法
- Element Plus El-Table固定列Hover不同步问题的解决方法
- :focus-visible 伪类:助力打造更友好网页交互的方法
- 同一个网页在不同电脑上滚动条样式不同的原因
- Laravel 中实现微信支付与支付宝支付优雅封装的方法
- 文本行末尾数字或图标在行高大于图标高度时如何居中显示