微信小程序Day3学习笔记

此笔记参考b站 黑马程序员微信小程序开发视频

小程序 - 视图与逻辑

在这里插入图片描述

1. 页面导航

1. 页面导航 - 页面之间的相互跳转

浏览器实现导航的方式有两种:

  1. <a> 链接
  2. location.href

小程序实现导航的方式有两种:

  1. 声明式导航

    在页面上声明一个<navigator>导航组件
    通过点击<navigator>组件实现页面跳转

  2. 编程式导航
    调用小程序的导航API,实现页面的跳转

2. 声明式导航(直接在wxml 标签里指定属性)

1. 导航到 tabBar 页面

导航到tabBar页面(必须要有open-type=“switchTab”)
url必须 / 开头
在这里插入图片描述

2. 导航到 非tabBar页面

导航到 tabBar 页面(open-type=“navigate”)(其实可以省略不写
url必须 / 开头
在这里插入图片描述

3. 后退导航

(open-type=“navigateBack”)
delta=“1”(默认值,后退一页可以不写
在这里插入图片描述

3. 编程式导航(在js文件中 调用 wx.方法)

1. 导航到 tabBar 页面

url 后不能带参数
在这里插入图片描述

**示例:**跳转到 tabBar 页面 wx.switchTab({})
在这里插入图片描述

2. 导航到 非tabBar 页面

url 后可以带参数
在这里插入图片描述

**示例:**跳转到非 tabBar 页面 wx.navigateTo({})
在这里插入图片描述

3. 后退导航

在这里插入图片描述

示例:
wx.navigateBack(
{ delta: 1 后退一层可以不写}
)

在这里插入图片描述

4. 导航传参

1. 声明式导航传参

=
不同参数A & B
在这里插入图片描述

2. 编程式导航传参

**示例:**跳转到非 tabBar 页面 wx.navigateTo({})

可以带参数
在这里插入图片描述

3. 在 onLoad 中接受导航参数

options 就是参数对象
在这里插入图片描述

将导航传递过来的参数对象,挂载到页面的data对象里,这样方便调用
在这里插入图片描述
this.setData()
在这里插入图片描述

2.页面事件

1. 下拉刷新

移动端专有名词,指的是手指在屏幕上的下拉滑动操作,从而重新加载页面数据的行为

启用下拉刷新效果:(默认未开启)
推荐使用 局部页面开启下拉刷新

在这里插入图片描述

json文件中 - 配置下拉刷新窗口的样式

在这里插入图片描述

监听页面的下拉刷新事件

在这里插入图片描述在这里插入图片描述

在页面的 json 文件中配置 开启下拉刷新
在这里插入图片描述

设置onPullDownRefresh: function(){ }
刷新后,控制台会打印字符串
在这里插入图片描述

重置count的值
在这里插入图片描述

停止下拉刷新效果

 /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.setData({
      count: 0
    })
    wx.stopPullDownRefresh()
  },

在这里插入图片描述

2. 上拉触底 事件

手指在屏幕上的上拉滑动操作,加载更多数据的行为

监听页面的上拉触底 事件

onReachBottom()
在这里插入图片描述防止频繁的发起数据请求:

上拉触底之后,又触发了一次上拉触底事件,不应该再重新加载。(节流,同一时间只允许发出一次请求,上一次请求未完成时,不可以重复发请求)

/**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    console.log("触发了上拉触底事件")
  },

3. 配置上拉触底 距离

在这里插入图片描述
.json 文件配置

{
  "usingComponents": {},
  "enablePullDownRefresh": true,
  "backgroundColor": "#efefef",
  "backgroundTextStyle": "dark",
  "onReachBottomDistance": 150
}

4. 上拉触底案例

在这里插入图片描述

 /**
   * 页面的初始数据
   */
  data: {
    colorList: []
  },

  getColors(){
    wx.request({
      url: 'https://applet-base-api-t.itheima.net/api/color',
      method: 'get',
      success: ({data: res}) =>{
        this.setData({
          colorList:[...this.data.colorList,...res.data]
        })
      }
    })
  },


1. 定义获取随机颜色的方法

展开旧数据,交给大数组;展开新数据,交给大数组。
在这里插入图片描述

2. 在页面加载时获取初始数据

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.getColors()
  },

3. 渲染 UI 结构 并美化页面效果

在这里插入图片描述
wx:for 循环
wxml


<view wx:for="{{colorList}}" wx:key="index" class="num-item" style="background-color: rgba({{item}});">{{item}}</view>

wxss

.num-item {
  border: 1px solid #efefef;
  border-radius: 8rpx;
  line-height: 200rpx;
  margin: 15rpx;
  text-align: center;
  text-shadow: 0rpx 0rpx 5rpx #fff;
  box-shadow: 1rpx 1rpx 6rpx #aaa;
}

4. 上拉触底时获取随机颜色

在这里插入图片描述

5. 添加 loading 提示效果

在这里插入图片描述

 getColors(){

    // 需要展示 loading效果
    wx.showLoading({
      title: '数据加载中...'
    })

    wx.request({
      url: 'https://applet-base-api-t.itheima.net/api/color',
      method: 'get',
      success: ({data: res}) =>{
        this.setData({
          colorList:[...this.data.colorList,...res.data]
        })
      },
      // 成功之后隐藏 loading
      complete: () => {
        wx.hideLoading()
      }
    })

  },

6. 对上拉触底进行 节流 操作

连续触底好几次,当前正在请求下一页的数据,需要把后续的所有请求都 屏蔽 掉。

在这里插入图片描述

5. 自定义编译模式

在这里插入图片描述

3. 生命周期

1. 什么是 生命周期

启动 - 关闭,中间所经过的时间段。
在这里插入图片描述

2. 生命周期 的 分类

在这里插入图片描述

3. 什么是 生命周期 函数

在这里插入图片描述

4. 生命周期函数 的 分类

在这里插入图片描述

5. 应用的 生命周期函数

onLaunch 全局只触发一次
在这里插入图片描述

6. 页面的 生命周期函数

在这里插入图片描述

4.WXS脚本

1. 介绍

WXS(WeiXin Script) 是小程序独有的一套 脚本语言,结合WXML,可以构建出页面的结构。

WXML 中无法调用在页面的 .js 中定义的函数,但是,wxml 中可以调用 wxs 中定义的函数。因此,小程序中wxs的典型应用场景就是 “过滤器”。

现在支持 es6 语法了!
在这里插入图片描述

2. 基础语法

内嵌 wxs 脚本:
wxs 代码可以编写在 wxml 文件中的 <wxs> 标签内
类似于 JavaScript 代码可以编写在 html 文件中的 <script> 标签内一样。

在这里插入图片描述

1. 内嵌脚本

在 view 中直接调用 {{ module 名字 . 方法名字}}


<view>{{m1.toUpper(username)}}</view>

<wxs module="m1">
  module.exports.toUpper = function(str) {
    return str.toUpperCase()
  }
</wxs>

2. 定义外联的 wxs 脚本

在这里插入图片描述

// 外联 wxs 脚本
function toLower(str){
  return str.toLowerCase()
}

module.exports = {
  toLower: toLower // 属性,对应具体的值
}

3. 使用 外联的 wxs 脚本

在这里插入图片描述
wxml 中使用

<view>{{m2.toLower(country)}}</view>

<wxs src="../../utils/tools.wxs" module="m2"></wxs>

4. wxs 的特点

1. 与 js 不同

在这里插入图片描述

2. 不能作为 组件的 事件回调

在这里插入图片描述

3. 隔离性

在这里插入图片描述

4. 性能好

在这里插入图片描述

5. 案例 - 本地生活(列表页面)

在这里插入图片描述

1. 页面导航 并传参

wxml

navigator , url 跳转目标页面,?后页面与页面之间传参


<!-- 九宫格区域 -->
<view class="grid-list">
  <navigator class="grid-item" wx:for="{{gridList}}" wx:key="id" 
    url="/pages/shoplists/shoplists?id={{item.id}}&title={{item.name}}">
    <image src="{{item.icon}}"></image>
    <text>{{item.name}}</text>
  </navigator>
</view>

2. 动态设置标题内容,并创建编译模式

在这里插入图片描述

在页面的 onReady里使用wx.setNavigationBarTitle

在这里插入图片描述

前一个页面传递的参数,可以在 后一个页面的 js - onLoad 里获取。

需要将options里的数据,转存到 data 里。

/**
   * 页面的初始数据
   */
  data: {
    query:[],
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.setData({
      query: options
    })
  },

之后再在 onReady里使用转存到 data 里的数据。

 /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    wx.setNavigationBarTitle({
      title: this.data.query.title,
    })
  },

3. 列表页面的 API 接口

请求参数,

  /**
   * 页面的初始数据
   */
  data: {
    query:[],
    shopList:[],
    page:1,
    pageSize:10,
    total:0
  },

//


  getShopList(){
    wx.request({
      url: `https://applet-base-api-t.itheima.net/categories/${this.data.query.id}/shops`,
      method: 'GET',
      data: {
        _page: this.data.page,
        _limit: this.data.pageSize
      },
      success: (res)=>{
        this.setData({
          shopList: [...this.data.shopList,...res.data],
          total: res.header['X-Total-Count'] - 0  // 从字符 获得数字
        })
      }
    })
  },

4. 初步实现 上拉加载效果

1. 展示 loading 的效果

在 js 中,先showLoading,后在 complete 里 hideLoading


  // 以分页的形式 获取商铺列表数据 的方法
  getShopList(){
    // 展示 loading 效果
    wx.showLoading({
      title: '数据加载中...',
    })

    wx.request({
      url: `https://applet-base-api-t.itheima.net/categories/${this.data.query.id}/shops`,
      method: 'GET',
      data: {
        _page: this.data.page,
        _limit: this.data.pageSize
      },
      success: (res)=>{
        this.setData({
          shopList: [...this.data.shopList,...res.data],
          total: res.header['X-Total-Count'] - 0
        })
      },
      // 
      complete: ()=>{
        wx.hideLoading()
      }
    })
  },

2. 上拉触底,请求下一页数据

上拉触底的距离

json 里配置

{
  "usingComponents": {},
  "onReachBottomDistance": 200
}

页码值加一, 再getShopList
js 里编写代码

 /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    this.setData({
      page: this.data.page + 1
    })
    
	 // 获取下一页数据
    this.getShopList()
  },

3. 节流阀

data 里定义节流阀

 isLoading: false

getShopList 方法里,先设置 true, complete 之后 设置回 false


  // 以分页的形式 获取商铺列表数据 的方法
  getShopList(){
    this.setData({
      isLoading: true
    })
    // 展示 loading 效果
    wx.showLoading({
      title: '数据加载中...',
    })

    wx.request({
      url: `https://applet-base-api-t.itheima.net/categories/${this.data.query.id}/shops`,
      method: 'GET',
      data: {
        _page: this.data.page,
        _limit: this.data.pageSize
      },
      success: (res)=>{
        this.setData({
          shopList: [...this.data.shopList,...res.data],
          total: res.header['X-Total-Count'] - 0
        })
      },
      // 
      complete: ()=>{
        wx.hideLoading()
        this.setData({isLoading: false})
      }
    })
  },


5. 判断是否还有 下一页数据

没有后续数据,不应该发起额外的请求
在这里插入图片描述
。。。
在这里插入图片描述

代码:(js)
显示 消息提示框

 onReachBottom() {
    if(this.data.page * this.data.pageSize >= this.data.total){
      // 证明没有下一页的数据了
      return wx.showToast({
        title: '数据加载完毕!',
        icon: 'none'
      })
    }
    if(this.data.isLoading) return  //正在请求,结束该方法
    this.setData({
      page: this.data.page + 1
    })

    this.getShopList()
  },

在这里插入图片描述

6. 实现 下拉刷新功能

  1. json
{
  "usingComponents": {},
  "onReachBottomDistance": 200,
  "enablePullDownRefresh": true,
  "backgroundColor": "#efefef",
  "backgroundTextStyle": "dark"
}
  1. 在 js 中,重置关键数据,发起数据请求

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    // 重置关键的数据
    this.setData({
      page: 1,
      shopList: [],
      total: 0
    }),
    // 重新发起数据请求
    this.getShopList()
  },
  1. 在 js 中,结束下拉刷新效果

wx.stopPullDownRefresh()


// 总方法名
getShopList(cb){

// wx.request里
 complete: ()=>{
        wx.hideLoading()
        this.setData({isLoading: false})
        //写在这里,不太合适,上拉触底也会调用,但是用不到。要优化
        // wx.stopPullDownRefresh()
        cb &&cb()  // 短路运算
      }
    })
}

在这里插入图片描述

7. 使用 wxs 处理手机号

tools.wxs

// 外联 wxs 脚本
function toLower(str){
  return str.toLowerCase()
}

function splitPhone(str) {
  if(str.length !== 11) return str

  var arr = str.split('')
  console.log(arr)
  arr.splice(3,0,'-')
  arr.splice(8,0,'-')
  return arr.join('')
}


module.exports = {
  toLower: toLower, // 属性,对应具体的值
  splitPhone: splitPhone
}

在 wxml 里写,就可以用了


<view class="shop-item" wx:for="{{shopList}}" wx:key="id">
  <view class="thumb">
    <image src="{{item.images[0]}}"></image>
  </view>
  <view class="info">
    <text class="shop-title">{{item.name}}</text>
    <text>电话:{{tools.splitPhone(item.phone)}}</text>
    <text>地址:{{item.address}}</text>
    <text>营业时间:{{item.businessHours}}</text>
  </view>
</view>

<wxs src="../../utils/tools.wxs" module="tools"></wxs>

8.总结

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值