微信小程序:声明式导航、刷新节流

声明式导航

navigator 标签可以实现页面跳转。

<!-- 语法格式 -->
<navigator url="页面路径" open-type="跳转方式"></navigator>
open-type 属性 说明
navigate 普通页面跳转(默认)
switchTab tabBar页面跳转
navigateBack 后退页面
配合 delta 属性使用,表示回退几个页面,默认是 1
注意:非 tabBar 页面才有回退。

通过 Js 方式跳转页面

  1. 跳转到普通页面

    wx.navigateTo({
        url: '页面路径',
        success: {
            
        }
    })
    
  2. 跳转到 tabBar 页面

    wx.navigateTo({
        url: '页面路径'
    })
    
  3. 回退页面

    delta 表示回退几个页面。

    wx.navigateBack({
        delta: 1,
    })
    

导航传参

  • 参数传递

    1. 在标签上跳转传递

      <navigator url="/pages/message/message?参数名=值">
      
    2. 在js中跳转传参

      wx.navigateTo({
          url: 'pages/message/message?参数1=值&参数2=值'
      })
      
  • 参数接收

    在跳转后的页面的 onLoad 生命周期内,使用 options 参数接收。

    Page({
        data() {
            query: {}
        },
        onLoad(options) {
            this.setData({
                this.query = options
            })
        }
    })
    

页面导航标题

wx.setNavigationBarTitle 可以动态设置当前页面的导航标题。

  • 父页面

    <block wx:for="{{gridList}}" wx:key="id">
        <!-- 1.传递页面标题 -->
        <navigator class="grid-item" url="/pages/shoplist/shoplist?id={{item.id}}&title={{item.name}}">
            <image src="{{item.icon}}"></image>
            <text>{{item.name}}</text>
        </navigator>
    </block>
    
  • 子页面

    Page({
        data: {
            query: {}
        },
        // 生命周期函数--监听页面加载
        onLoad(options) {
            // 2.接收父页面传递过来的参数
            this.setData({ query: options })
        },
        // 生命周期函数--监听页面初次渲染完成
        onReady () {
            // 3.动态设置当前页面的标题
            wx.setNavigationBarTitle({
                title: this.data.query.title
            })
        }
    })
    

下拉刷新

*.json 文件中的 enablePullDownRefresh 用于开启页面下拉刷新。

方法名 说明
onPullDownRefresh() {} 监听下拉刷新
wx.stopPullDownRefresh() 停止下拉刷新
  1. 一般会关闭全局的下拉刷新,在需要使用的页面打开局部下拉刷新。

    /* app.json */
    {
        "window": {
            "enablePullDownRefresh": false
        }
    }
    
  2. 在页面的 json 文件中打开下拉刷新

    /* pages/home/home.json */
    {
        "enablePullDownRefresh": true
    }
    
  3. 在页面的 .js 文件中的 onPullDownRefresh 函数中做下拉刷新的业务处理。

    {
        // 页面相关事件处理函数--监听用户下拉动作
        onPullDownRefresh () {
            // 业务逻辑
            ...
            // 停止下拉刷新
            wx.stopPullDownRefresh()
        },
    }
    
    • 模拟商品列表下拉刷新

      Page({
          // 页面相关事件处理函数--监听用户下拉动作
          onPullDownRefresh() {
              // 清空已经加载的数据
              this.setData({
                  shopList: [],
                  page: 1
              })
              // 重新获取第一页数据
              this.getShopData()
          },
      })
      

上拉触底加载

在页面的 .js 中配置上拉加载事件的业务逻辑。

Page({
    // 页面上拉触底事件的处理函数
    onReachBottom() {
        ...
    }
})
  • 模拟商品列表上拉触底,加载更多数据。

    /* pages/shoplist/shoplist.js */
    Page({
        data: {
            shopList: [],	// 商品列表
            page: 1,		// 页数
            pageSize: 10	// 每页多少条数据
        },
    
        // 获取商品列表   
        async getShopData() {
            const { data:res } = await wx.p.request({
                url: `https://applet-base-api-t.itheima.net/categories/1/shops`,
                method: "GET",
                data: {
                    // 页数和每页显示多少条数据
                    _page: this.data.page,
                    _pageSize: this.data.pageSize
                },
            })
            this.setData({
                // 新数据添加到原数据后面
                shopList: [...this.data.shopList, ...res]
            })
        },
    
        // 页面相关事件处理函数--监听用户下拉动作
        onPullDownRefresh () {
            this.setData({ shopList: [] })
            this.getShopData()
    
            // 停止下拉刷新
            wx.stopPullDownRefresh()
        },
    
        // 页面上拉触底事件的处理函数
        onReachBottom() {
            // 上拉触底,页数+1
            this.setData({
                page: this.data.page + 1
            })
            // 加载更多数据
            this.getShopData()
        },
    })
    

加载节流

原理是在 data 中定义 isloading 参数,默认为 false,

在请求接口开始前,设置 isloading 为 true,接口请求完毕后 设置为 false。

Page({
    data: {
        // 商品列表
        shopList: [],
        // 节流阀
        isLoading: false,
    },
    
	// 获取商品列表方法
    getShopList() {
        // 1.展示loading效果
        wx.showLoading({
            title: '数据加载中···'
        })
        // 2.开启节流阀
        this.setData({
            isLoading: true
        })
        // 3.发起网络请求,请求商品列表数据
        wx.request({
            url: 'https://www.escook.cn/api/color',
            method: 'GET',
            success: ({ data:res }) => {
                this.setData({
                    shopList: [...this.data.shopList, ...res]
                })
            },
            // 物流成功失败都调用complete方法
            complete: () => {
                // 4.隐藏loading效果
               	wx.hideLoading()
                // 5.关闭节流阀
                this.setData({
                    isLoading: false
                })
            }
        })
    },
    
    // 页面上拉触底事件的处理函数
    onReachBottom() {
        // 6.如果节流阀开启,则不继续请求接口
        if (this.data.isLoading) return
        this.getShopList()
    }
})

相关推荐

  1. 程序声明导航刷新

    2024-07-17 13:58:03       22 阅读
  2. 程序瀑布组件

    2024-07-17 13:58:03       66 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-17 13:58:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-17 13:58:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-17 13:58:03       58 阅读
  4. Python语言-面向对象

    2024-07-17 13:58:03       69 阅读

热门阅读

  1. 苹果HEIC 数据转 PNG

    2024-07-17 13:58:03       22 阅读
  2. uniapp使用 web-view 与网页互相通信

    2024-07-17 13:58:03       20 阅读
  3. Arrays的用法(附10道练习题)

    2024-07-17 13:58:03       23 阅读
  4. Hadoop之/etc目录下各配置文件的作用详解

    2024-07-17 13:58:03       17 阅读
  5. 前端学习常用技术栈

    2024-07-17 13:58:03       22 阅读
  6. Perl语言入门学习

    2024-07-17 13:58:03       20 阅读
  7. 【闲聊】-Perl的基础语法

    2024-07-17 13:58:03       23 阅读
  8. LVS的NAT方式

    2024-07-17 13:58:03       18 阅读
  9. SAP中MIR4使用的BAPI是什么,如何使用?

    2024-07-17 13:58:03       21 阅读
  10. cuda--docker

    2024-07-17 13:58:03       25 阅读