收藏
回答

下拉刷新失效?

如图布局图,在点击查询后,在查询的状态下,下拉刷新,没有退出查询状态,下拉刷新失效,在第二次下拉才生效。在查询状态下,切换到其他页面,再回到该页面,没有回到初始页面,一直保持在查询状态下。

想要的效果是,在查询状态下,下拉刷新退出查询状态,回到初始页面状态,从其他页面切换到该页面,回到初始页面。

代码:

/**
   * 获取选项卡
   */
  onItemChengdeEvent(event) {
    var index = event.detail.index;
    // console.log(index);
    this.setData({
      currentIndex: index
    });
    if (!this.data.isQuerying) {
      this.lowdrelease();
    } else {
      this.onchaxun()
    }
  },
/**
   * 获取数据库数据
   */


  async loadData(start = 0, vehicle,newQuery = {}) {
    const that = this;
    const index = that.data.currentIndex;
    console.log(index);
    let query = {};
    switch (index) {
      case 0:
        break;
      case 1:
        query = {carpool: '我要找车'};
        break;
      case 2:
        query = {carpool: '我要找人'};
        break;
      case 3:
        query = {carpool: '我找货车'};
        break;
      case 4:
        query = {carpool: '我要找货'};
        break;
    }
    console.log(query)
    if (that.data.isQuerying) {
      newQuery = _.and(query,{
        startPoint: db.RegExp({
          regexp: '^' + that.data.startPoint
        }),
        goal: db.RegExp({
          regexp: '^' + that.data.goal
        }),
      })
    } else {
      newQuery = query
    }
    console.log('条件查询', newQuery)
    try {
      let promise = db.collection(vehicle).where(newQuery);
      if (start > 0) {
        promise = promise.skip(start);
      }
      promise = promise.limit(2)
        .orderBy("redden.reddenStartTime"'desc')
        .orderBy("topping.toppingStarttime""desc")
        .orderBy("create_time""desc");
      const vehiclesRes = await promise.get();
      const vehicles = vehiclesRes.data;
      console.log('获取数据库数据', vehicles)
      const countResult = await promise.count();
      const total = countResult.total;
      console.log('总计数', total)
      const newVehicles = start > 0 ? this.data.vehicles.concat(vehicles) : vehicles;
      newVehicles.forEach((vehicle, index) => {
        vehicle.create_time = vehicle.create_time.toString();
      });
      const hasmore = false;
      return {
        newVehicles,
        total,
        hasmore,
      };
    } catch (error) {
      console.log('failed to load data:', error);
      throw error;
    }
  },
  /**
   * 获取初始数据
   */
  async lowdrelease(start = 0) {
    const that = this;
    try {
      const {
        newVehicles: vehicles,
        total: vehiclesTotal,
        hasmore: hasmore
      } = await that.loadData(start, 'vehicle');
      that.setData({
        vehicles: vehicles,
        hasmore: hasmore,
        result: vehiclesTotal,
      })
    } catch (error) {
      console.log('failed to load data:', error);
      throw error;
    }
  },
/**
   * 点击查询事件
   */
  async onchaxun(start = 0) {
    const that = this;
    that.setData({
      isQuerying:true
    })
    try {
      const {
        newVehicles: vehicles,
        total: vehiclesTotal,
        hasmore: hasmore
      } = await that.loadData(start, 'vehicle');


      that.setData({
        startPointStr: '',
        goalStr: '',
        vehicles: vehicles,
        hasmore: hasmore,
        result: vehiclesTotal,
      });
    } catch (error) {
      console.log('failed to load data:', error);
      throw error;
    }
  },
/**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.lowdrelease(0);
  },
/**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.lowdrelease(0);
    this.setData({
      isQuerying: false
    })
    wx.stopPullDownRefresh();


  },


回答关注问题邀请回答
收藏

2 个回答

  • 正青春
    正青春
    2天前

    下拉的时候,你把之前的数据清空(做下监控),下拉后把默认数据赋值,你切换页面如果还是首次查询的数据,说明切换页面首次页面没有再次加载

    2天前
    有用
    回复 1
    • 蓝天☁
      蓝天☁
      2天前
      怎么操作?获取初始数据和查询事件,分开的时候是正常的,优化之后就出现这样的问题,是不是索引的问题?
      2天前
      回复
  • 正好时光
    正好时光
    2天前

    查询接口时加一个全局loading

    2天前
    有用
    回复 5
    • 蓝天☁
      蓝天☁
      2天前
      loading不是提示用的?第一次下拉不是没有加载数据,加载的数据还是查询结果的数据,第二次下拉才退出查询状态,加载初始数据,切换页面不管怎么切换,加载的都是查询状态下的数据
      2天前
      回复
    • 正好时光
      正好时光
      2天前回复蓝天☁
      currentIndex下拉和进入页面重置一下currentIndex初始状态
      2天前
      1
      回复
    • 蓝天☁
      蓝天☁
      2天前回复正好时光
      怎么弄?
      2天前
      回复
    • 正好时光
      正好时光
      1天前回复蓝天☁
      不确定是不是你想要的,直接发代码评论失败,就贴张图了,调整代码:
      1天前
      1
      回复
    • 蓝天☁
      蓝天☁
      1天前
      初始数据是获取到了,但是点击选项卡的时候,又变成了查询状态是数据。后面我把选项卡的索引单独做了个函数,然后再把索引传到初始数据和查询事件,目前看是解决了问题
      1天前
      回复
登录 后发表内容