A页面 点击navigateTo 跳转到B页面
B页面调用了一个列表组件(使用component编写的),点击组件中的每一项回跳转到C页面
C页面执行完成后,返回B页面,(使用navigateBack进行返回),返回后,点击B页面左上角的回退按钮
发现,得点击2次,才能返回到A页面。
我在C页面做了一些数据更改的操作,操作完成后,我希望回退到B页面,B页面能自己重新刷新一下,这样才能看到我刚才的更改。但是,B页面其实是个组件模版页面。我在onshow里面,没法重新调用数据请求,因为数据都是分装在组件模版页中的,我不知道该怎么办呢?谁能帮帮我。
B页面:
wxml:
<listTag key-word="{{keyword}}" search-type="{{searchType}}" user-account="{{userInfo.userAccount}}" res-key="{{resKey}}"></listTag>
json:
{
"usingComponents": {
"listTag": "/components/list/listTag"
},
"navigationBarTitleText": ""
}
js:
// pages/crm/myCreatedAll.js
var app = getApp();
Page({
/**
* 页面的初始数据
*/
data: {
searchType:'',
resKey:'crmWorkRecord',
userInfo: {},
wmStyle:'',
count:0
},
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
console.log("--11111-----");
//NO.1 获取已注册用户的微信信息
this._getUserInfo();
//NO.2 根据获取到的信息判断用户是否登录
let isRelogin = this._isReLogin();
if (isRelogin) {
return;
}
let title="";
switch (options.searchType){
case "registerAll":
title ="我登记的全部工作记录";
break;
case "registerChecking":
title ='我登记的批示中的工作记录';
break;
case "registerChecked":
title = '我登记的批示完成的工作记录';
break;
case "checkAll":
title = '我审核的全部工作记录';
break;
case "checking":
title = '待我审核的工作记录';
break;
case 'checked':
title = "我审核过的工作记录";
break;
default:
title="根据编号、主题、客户搜索"
}
wx.setNavigationBarTitle({
title: title
})
this.setData({
searchType: options.searchType,
keyword:options.keyword?options.keyword:""
});
},
_getUserInfo: function () {//获取登录权限
let that = this;
if (app.globalData.userInfo) {
this.setData({
userInfo: app.globalData.userInfo
})
} else {
app.getUserInfo(function (userInfo) {
that.setData({//更新数据
userInfo: userInfo
});
});
}
},
_isReLogin: function () {//是否需要重新登录
var account = this.data.userInfo.userAccount;
if (!account) {
app.alertMsg("无法识别当前登录用户,请重新登录", function () {
wx.redirectTo({
url: '/pages/login/index',
})
});
return true;
}
return false;
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady: function () {
},
/**
* 生命周期函数--监听页面显示
*/
onShow: function () {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide: function () {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh: function () {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom: function () {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage: function () {
}
})
刷新数据放onshow里就可以了。如果非回退不刷新的话,可以在回退前set一个值到globalData或者缓存里,在会退后页面onshow里判断这个值再确定是否请求数据
在B页面的onShow中请求数据不就可以吗,为什么这么麻烦?
用全局方式传值呀,app.key=1
在c可以用getCurrentPages获取到b,直接将b某个值改变
貌似官网,不推荐修改值栈中的数据
我现在是这么实现的:
C页面使用redirectTo 跳到B页面,这样在跳转到B页面后,数据会重新刷新。但又出现了个新问题。当我多次点击B页面上的list子选项回跳到C页面,做数据操作。然后,我再点击B左上角的回退按钮,我需要回退N多次,才能由B回到A。这个,太无语了,该怎么解决呢
还是按我刚才说的两种,写了个代码片段 你看看 wechatide://minicode/6lLGwjmX7hw5
非常感谢,按照您的方式,最后实现了刷新。我还有个问题想要请教您一下,就是小程序的图片预览接口。
wx.previewImage({
current:current,
urls: urls
});
我发现,不论current如何变化,预览时默认都是从第一张图片开始显示。这个是不是小程序的bug了
传递的current是个网络连接形式的图片,我打日志然后,拷贝到放在浏览器里面显示就是正常的图片。但是,放到小程序中,却一直显示第一张
代码片段 wechatide://minicode/DyTLXkmS7pXg
参考你的方式,我实现了