小程序如何返回刷新
发布于 5 年前 作者 juan10 4671 次浏览 来自 问答

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 () {

}

})

5 回复

在B页面的onShow中请求数据不就可以吗,为什么这么麻烦?

用全局方式传值呀,app.key=1

在c可以用getCurrentPages获取到b,直接将b某个值改变

刷新数据放onshow里就可以了。如果非回退不刷新的话,可以在回退前set一个值到globalData或者缓存里,在会退后页面onshow里判断这个值再确定是否请求数据

我现在是这么实现的:

C页面使用redirectTo 跳到B页面,这样在跳转到B页面后,数据会重新刷新。但又出现了个新问题。当我多次点击B页面上的list子选项回跳到C页面,做数据操作。然后,我再点击B左上角的回退按钮,我需要回退N多次,才能由B回到A。这个,太无语了,该怎么解决呢

回到顶部