微信小程序入门案例(二)

1、书接上回

想了解前文的朋友,可以点击微信小程序前端零基础入门案例,接着上篇的的案例,我们接着完善主页的内容。

2、案例展示

点击美食,跳转到美食的详情页,点击洗浴足疗跳转对应的详情页,以此类推…
在这里插入图片描述

在这里插入图片描述

3、代码编写

3.1、添加详情页

修改app.json页面的pages选项,添加serverlist页面,用于展示对应的详情页,代码如下,

"pages":[
    "pages/home/home",
    "pages/message/message",
    "pages/about/about",
    "pages/serverlist/serverlist"
  ],

3.2、实现页面跳转

在home.wxml,将九宫格的数据添加导航,并传递对应的id和name,用于详情页的标题和发起其对应请求,代码如下

<view class="gridList">
  <navigator class="gridItem" wx:for="{{GridList}}" wx:key="id" url="/pages/serverlist/serverlist?id={{item.id}}&title={{item.name}}">
    <image src="{{item.icon}}"></image>
    <text>{{item.name}}</text>
  </navigator>
</view>

3.3、接收数据,发起请求

详情页接收主页点击后传递来的id和name,name用于动态渲染标题,id用于动态发起请求,
1、打开serverlist.js,定义数据,在data中,query接收主页传递来的id和name,details用于接收发送请求后的数据,page表示第几页,pageSize表示每页显示的条数,total表示总条数,flag用于之后的判断节流,避免因上划触底多次而发起多次请求
2、自定义方法getDetails(),用于发送请求,接收数据。在请求数据前,调用wx.showLoading()方法用于显示数据加载画面,将flag置为true表示正在发送请求,在complete中重置为false,表示请求结束,避免重复发起请求,然后再调用wx.request()用于发起请求,其中url是根据query中的id为动态变化的
3、onLoad()中的方法在页面加载时就调用,将传递来的数据id和name封装到query中,并发起请求,并对data中数据进行赋值
4、onReady()中的方法会在页面初次渲染完成时调用,wx.setNavigationBarTitle()方法是为了渲染页面的标题,例如美食…
5、 onPullDownRefresh()函数实实在页面下拉时触发,用于重置数据,发送新的请求
6、onReachBottom() 会在上拉到距离屏幕底部50像素(默认50像素,可在对应的.json文件中修改)时调用,首先判断下一页是否还有数据需要,如果没有的话,wx.showToast()方法会在屏幕中跳出提示对应的提示框,显示title中的内容,如果有的话,修改page的值,再次发送请求下一页的数据。

// pages/serverlist/serverlist.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    query:{},
    details:[],
    page:1,
    pageSize:10,
    total:0,
    falg:false
  },
  getDetails(stop){
    wx.showLoading({
      title: '数据加载中...',
    })
    this.setData({
      falg:true
    })
    wx.request({
      url: `https://www.escook.cn/categories/${this.data.query.id}/shops`,
      method: 'GET',
      data:{
        _page:this.data.page,
        _limit:this.data.pageSize
      },
      success:(res)=>{
        this.setData({
          details: [...this.data.details, ...res.data],
          total:res.header['X-Total-Count']-0
        })
      },
      complete:()=>{
        wx.hideLoading()
        this.setData({
          falg:false
        })
        stop && stop()
      }
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.setData({
      query:options
    })
    this.getDetails();
  },

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

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    //重置数据
    this.setData({
      page:1,
      total:0,
      details:[]
    })
    //发起请求
    this.getDetails(()=>{
      wx.stopPullDownRefresh()
    })
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    if (this.data.page * this.data.pageSize >= this.data.total) {
      wx.showToast({
        title: '到底了!'
      })
    }
    if (this.data.falg==false && (this.data.page * this.data.pageSize < this.data.total)) {
      this.setData({
        page:this.data.page+1
      })
      this.getDetails()
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})

3.4、将数据渲染到页面

1、serverlist.wxml页面,类似浏览器的html页面,其中最后一行代码见3.5数据处理中会有详解,是用于处理手机号字符串,代码如下

<view wx:for="{{details}}" wx:key="id" class="detail-item">
  <view class="img">
    <image src="{{item.images[0]}}"></image>
  </view>
  <view class="text">
    <text>{{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>

2、serverlist.wxss页面,是为了美化serverlist.wxml页面,类似浏览器的css的作用,代码如下

/* pages/serverlist/serverlist.wxss */
.detail-item{
  display: flex;
  padding: 10rpx;
  border: 2rpx solid #efefef;
  margin: 15rpx;
  border-radius: 10rpx;
  box-shadow: 2rpx 2rpx 10rpx #ddd;
}
.img image{
  width: 250rpx;
  height: 250rpx;
  margin-right: 20rpx;
}
.text{
  display: flex;
  flex-direction: column;
  justify-content: space-around;
  font-size: 24rpx;
}
.text :nth-child(1){
  font-weight: bold;
}

3.5、数据处理

在详情页面中向手机号中添加“-”,便于记忆和拨号
1、在untils文件夹下新建一个tools.wxs文件,wxs相当于浏览器中的js代码,定义函数splitPhone函数用于处理手机号字符串,并导出,在serverlist.wxml页面进行调用。

function splitPhone(str){
  if (str.length != 11) {
    return str
  }
  var arr=str.split('')
  arr.splice(3,0,'-')
  arr.splice(8,0,'-')
  return arr.join('')
}
module.exports = {
  splitPhone:splitPhone
}

4、运行展示

代码编写完成后,发现页面数据和图片加载不出来,记得勾选一下如下选项,详情->本地设置->不校验…,设置完毕后就能全部加载出来了。
在这里插入图片描述

5、源码领取

点这里获取源码

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
微信小程序是一种轻量级的应用程序,可以在微信内直接运行,无需下载安装。下面是一个简单微信小程序入门案例,供参考: 1. 创建小程序项目 首先,在微信开发者工具中创建一个小程序项目,填写相应的项目名称、AppID等信息。创建完成后,可以看到项目中已经自动生成了一些文件和目录。 2. 编写界面和逻辑代码 在小程序项目中,界面和逻辑代码被分别存储在两个不同的文件夹中,分别为 `pages` 和 `utils`。其中,`pages` 文件夹存放小程序的界面代码,而 `utils` 文件夹则存放小程序的逻辑代码。 在 `pages` 文件夹中,可以新建一个 `.wxml` 文件来定义小程序的界面结构,使用 `.wxss` 文件来设置界面的样式,使用 `.js` 文件来编写小程序的逻辑代码。 例如,下面是一个简单小程序界面代码: ``` <!-- index.wxml --> <view class="container"> <text>欢迎使用微信小程序!</text> </view> ``` 在对应的 `.js` 文件中,可以编写小程序的逻辑代码,例如: ``` // index.js Page({ data: { message: 'Hello, World!' } }) ``` 3. 预览和调试小程序 在编写完小程序的界面和逻辑代码后,可以在微信开发者工具中进行预览和调试。在工具中,点击“预览”按钮,即可在微信客户端中查看小程序的效果。 在预览和调试过程中,可以使用工具提供的调试功能来检查小程序的运行状态和调试错误。 4. 发布小程序小程序开发完成后,可以将其发布到微信小程序平台,供用户使用。在微信开发者工具中,点击“上传”按钮,即可将小程序上传到微信小程序平台进行审核和发布。 需要注意的是,小程序需要经过审核才能够正式发布。因此,在上传小程序之前,需要仔细检查小程序的代码和功能,确保符合微信小程序的相关规定和要求。 以上是一个简单微信小程序入门案例,希望对初学者有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Double Handsome

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值