本文介绍: 在移动端中,数据表中某项数据点击编辑进入一个页面编辑数据保存回退数据列表页,此时需要刷新列表数据,否则显示的列表数据还是旧的。这种场景感觉很多地方都有出现,是需要详细说说方法,也就是uniapp返回后刷新页面数据。本人每篇文章都是一字一句码出来,希望大佬们多提提意见。创作不易,给我打打气,加加油☕。

一、前言

移动端中,数据表中某项数据点击编辑,进入下一个页面编辑数据,保存后回退到数据列表页,此时需要刷新列表数据,否则显示的列表数据还是旧的。这种场景感觉很多地方都有出现,是需要详细说说方法,也就是uniappuni.navigateBack返回后刷新页面数据。

1.1、uni.navigateBack

二、方法

2.1、父页面设置子函数onBackPress

详细文档可点击【跳转】,适用于刷新多处数据

export default {
    onBackPress(options) {
        this.refreshData();
    },
    methods:{
        refreshData: function() {
            //加载数据
        }
    }
}

2.2、uni.$emituni.$on监听通知数据变更

2.2.1、子页面

页面需要返回一页面的地方写入uni.navigateBack然后success回调uni.$emit发送数据更新通知

uni.navigateBack({
    delta: 1, // 返回层数,2则上上页
    success() {
        uni.$emit('update',{msg:'页面更新'})
    }
})

2.2.2、父页面

页面初始化uni.$on监听数据更新,在回调函数处理数据。在页面销毁移除监听

export default {
    mounted() {
        uni.$on('update', function(data) {
            //触发更新
        })
    },
    //为了优化代码可以加上移除事件,避免重复监听事件
    onUnload() {
        // 移除监听事件  
        uni.$off('update');
    }
}

2.3、onShow子函数处理数据

2.3.1、子页面

准备回退到上一页之前,将上一页是否刷新参数改为是的状态

let pages = getCurrentPages();
let prevPage = pages[pages.length - 2]; // 上一个页面
// 直接调用上一个页面的setData()方法,把数据存到上一个页面中去
prevPage.setData({
    isRefresh: 1 
})
// 再根据需求确定返回一页
uni.navigateBack({
    delta: 1
})

2.3.2、父页面

onShow钩子函数获取判断条件

export default{
	data() {
		return{
    		isRefresh:false
		}
	},
	onShow() {  
		// 如果是提交状态返回isRefresh=1,才刷新页面,从详情过来无需刷新
		let pages = getCurrentPages();
		let currPage = pages[pages.length - 1];
		if(currPage.__data__.isRefresh) {
			// 重新获取数据
			this.getData(true)//获取列表数据
			// 每一次需要清除,否则会参数缓存
        	currPage.__data__.isRefresh=false
		}
	}
}

2.4、注意

如果出现数据没有更新,可以使用$forceUpdate或者先置空数据再赋值数据,大概率是数据没有响应

二、最后

本人每篇文章都是一字一句码出来,希望大佬们多提提意见。顺手来个三连击,点赞👍收藏💖关注✨。创作不易,给我打打气,加加油☕

原文地址:https://blog.csdn.net/u012804440/article/details/134649210

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_49627.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注