收藏
回答

小程序如何返回刷新

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 个回答

  • 貌似祸害
    貌似祸害
    2018-08-02

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

    2018-08-02
    有用 6
    回复
  • 尚
    2018-08-01

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

    2018-08-01
    有用
    回复
  • 神经蛙
    神经蛙
    2018-08-01

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

    2018-08-01
    有用
    回复
  • _靜觀世態.zZ
    _靜觀世態.zZ
    2018-08-01

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

    2018-08-01
    有用
    回复 1
    • 角谷静
      角谷静
      2018-08-01

      貌似官网,不推荐修改值栈中的数据

      2018-08-01
      回复
  • 角谷静
    角谷静
    2018-07-31

    我现在是这么实现的:

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

    2018-07-31
    有用
    回复 15
    • Helberrrt
      Helberrrt
      2018-07-31

      还是按我刚才说的两种,写了个代码片段  你看看   wechatide://minicode/6lLGwjmX7hw5

      2018-07-31
      1
      回复
    • 角谷静
      角谷静
      2018-07-31回复Helberrrt

      非常感谢,按照您的方式,最后实现了刷新。我还有个问题想要请教您一下,就是小程序的图片预览接口。

      wx.previewImage({

      current:current,

      urls: urls

      });

      我发现,不论current如何变化,预览时默认都是从第一张图片开始显示。这个是不是小程序的bug了


      2018-07-31
      回复
    • 角谷静
      角谷静
      2018-08-01回复Helberrrt

      传递的current是个网络连接形式的图片,我打日志然后,拷贝到放在浏览器里面显示就是正常的图片。但是,放到小程序中,却一直显示第一张

      2018-08-01
      回复
    • Helberrrt
      Helberrrt
      2018-08-01回复角谷静

      代码片段   wechatide://minicode/DyTLXkmS7pXg

      2018-08-01
      回复
    • 角谷静
      角谷静
      2018-08-01回复Helberrrt

      参考你的方式,我实现了

      2018-08-01
      回复
    查看更多(10)
登录 后发表内容