微信小程序开发第三课

打印 上一主题 下一主题

主题 678|帖子 678|积分 2034

1 wxml语法

1.1 模版语法

  1. #  1 在页面 xx.js 的 Page() 方法的 data 对象中进行声明定义
  2. #  2 在xx.wxml 中使用 {{}} 包裹,显示数据
  3. #  3 可以显示如下,不能编写js语句或js方法
  4.         -变量
  5.         -算数运算
  6.         -三元运算
  7.         -逻辑判断
  8.    
  9. # 4 只是单纯通过赋值,js中变量会变化,但是wxml中的页面不会变化,没有联动效果,需要使用setData()方法修改
  10.         - 更新数据
  11.     - 页面更新
  12. # 5 setData案例 修改数字
  13. ## 5.1 wxml
  14. <view>
  15. <view>姓名是:{{name}}</view>
  16. <view>年龄是:{{age}}</view>
  17. <button bind:tap="handleAddAge" plain="true" type="primary" size="mini">点击增加年龄</button>
  18. </view>
  19. ##5.2 js
  20.   handleAddAge(){
  21.     //this.data.age++
  22.     console.log(this.data.age)
  23.     this.setData({
  24.       age:this.data.age+1
  25.     })
  26.   },
  27.    
  28. # 6 setData案例 修改对象
  29. ## 6.1 wxml<view>
  30. <view>姓名是:{{userinfo.name}}</view>
  31. <view>年龄是:{{userinfo.age}}</view>
  32. <view>爱好是:{{userinfo.hobby}}</view>
  33. <button bind:tap="handleChangeName" plain="true" type="primary" size="mini">点击修改对象-姓名</button>
  34. </view>
  35. ## 6.2 js
  36.     data: {
  37.         name: 'justin',
  38.         age: 19,
  39.         userinfo: {
  40.           name: 'lqz',
  41.           age: 99
  42.         }
  43.       },
  44.   handleChangeName() {
  45.     // 增加数据
  46.     this.setData({
  47.       'userinfo.hobby': '篮球'
  48.     })
  49.     // 修改数据
  50.     this.setData({
  51.       'userinfo.name': '彭于晏'
  52.     })
  53.     // 修改多个数据--》简便方案--》展开运算符
  54.     // const userinfo = {
  55.     //   ...this.data.userinfo,
  56.     //   name: '新名字',
  57.     //   hobby: '乒乓球'
  58.     // }
  59.     // this.setData({
  60.     //   // userinfo:userinfo
  61.     //   userinfo //简写形式
  62.     // })
  63.     // 修改多个数据--》简便方案-->assign
  64.     const userinfo = Object.assign(this.data.userinfo, {
  65.       name: 'xxzz',
  66.       hobby: '烫头'
  67.     })
  68.     this.setData({
  69.       // userinfo:userinfo
  70.       userinfo //简写形式
  71.     })
  72.     //删除数据-->单个
  73.     delete this.data.userinfo.name // 页面删除不了,需要用setData更新
  74.     this.setData({
  75.       userinfo:this.data.userinfo
  76.     })
  77.     //删除数据-->多个--解构赋值
  78.     const {name,age,...res}=this.data.userinfo
  79.     this.setData({
  80.       userinfo:res
  81.     })
  82.   },
  83.    
  84. # 7 setData 修改数组
  85. ## 7.1 js
  86. data: {
  87.     names:['刘亦菲','迪丽热巴','古力娜扎','马尔扎哈']
  88.   },
  89.    
  90.    handleChangeList(){
  91.     //1 增加数组
  92.     // 1.1 增加再设置值
  93.     this.data.names.push('亚瑟王')
  94.     this.setData({
  95.       names:this.data.names
  96.     })
  97.     // 1.2 通过数组拼接
  98.     // const newList=this.data.names.concat("甄姬")
  99.     // this.setData({
  100.     //   names:newList
  101.     // })
  102.     // 1.3 通过解构赋值
  103.     const newList=[...this.data.names,"李白"]
  104.     this.setData({
  105.       names:newList
  106.     })
  107.     // 2 修改数组
  108.     this.setData({
  109.       'names[1]':'justin'
  110.     })
  111.     // 3 删除数组
  112.     this.data.names.slice(1)
  113.     this.setData({
  114.       names:this.data.names.slice(1)
  115.     })
  116.   },
  117. ## 7.2 wxml
  118. <view wx:for="{{names}}" wx:key="index">
  119. {{item}}
  120. </view>
  121. <button bind:tap="handleChangeList" plain="true" type="primary" size="mini">修改数组</button>
  122.    
  123.    
  124. # 8 双向数据绑定:input checkbox
  125. <view>
  126.   <!-- 不支持数组和对象 -->
  127.   <input type="text" model:value='{{name}}' style="border:orange solid 1rpx"/>
  128.   <checkbox model:checked="{{isCheck}}"/>
  129.   <text>{{isCheck}}</text>
  130. </view>
复制代码
1.2 列表渲染

  1. # 1 基本使用
  2. ## 1.1 js
  3.   data: {
  4.     goodsList:[{id:1001,name:'钢笔',price:9},{id:1002,name:'铅笔',price:6},{id:1003,name:'脸盆',price:99}]
  5.   },
  6. ##1.2 wxml
  7. <view>
  8. <!-- wx:key 提升性能,不写会警告  可以用 index或 *this:代指item本身  要唯一-->
  9. <view wx:for="{{goodsList}}" wx:key="*this">
  10. <!-- 默认每个对象是item,默认每个下标是index -->
  11. <!-- <text>商品id:{{item.id}}--商品名字:{{item.name}}--商品价格:{{item.price}}</text> -->
  12. </view>
  13. </view>
  14. # 2 修改wx:for-index  wx:for-item
  15. <view>
  16.   <view wx:for="{{goodsList}}" wx:key="*this" wx:for-item="info">
  17. <!-- 修改默认index和item--wx:for-index  wx:for-item    -->
  18. <text>商品id:{{info.id}}--商品名字:{{info.name}}--商品价格:{{info.price}}</text>
  19. </view>
  20. </view>
  21. # 3 block
  22. <block>商品id:{{info.id}}--商品名字:{{info.name}}--商品价格:{{info.price}}</block>
复制代码
1.3 条件渲染

  1. # 1 wx:if   wx:elif   wx:else
  2. <view>
  3.   <input type="text" model:value='{{score}}' style="border:orange solid 1rpx"/>
  4.   <view wx:if="{{score>=90&&score<=100}}">优秀</view>
  5.   <view wx:if="{{score>=80&&score<90}}">良好</view>
  6.   <view wx:if="{{score>=60&&score<80}}">及格</view>
  7.   <view wx:else="{{score>=90&&score<=100}}">不及格</view>
  8. </view>
  9. # 2 wx:if  和 hidden
  10. ## 2.1 js
  11. showPhoto:true,
  12. showPhotoHidden:true
  13.     handleShowPhoto(){
  14.         this.setData({
  15.             showPhoto:!this.data.showPhoto
  16.         })
  17.         console.log(this.data.showPhoto)
  18.     },
  19.     handleShowPhotoHidden(){
  20.         this.setData({
  21.             showPhotoHidden:!this.data.showPhotoHidden
  22.         })
  23.     },
  24.    
  25. ## 2.2 wxml
  26. <view>
  27. <image src="/images/b.jpg" mode="widthFix" wx:if="{{showPhoto}}"/>
  28. <button bind:tap="handleShowPhoto" plain="true" type="primary" size="mini">显示隐藏图片(if)</button>
  29. <view></view>
  30. <image src="/images/b.jpg" mode="widthFix" hidden="{{showPhotoHidden}}"/>
  31. <button bind:tap="handleShowPhotoHidden" plain="true" type="primary" size="mini">显示隐藏图片(hidden)</button>
  32. </view>
复制代码
二 发送网络哀求

2.1 wx.request()

  1. # 1 发送网络请求的域名,必须在微信公众平台配置
  2.         -本地环境去除,只适用于开发版和体验版
  3. # 2 发送请求
  4.   handleLoadData(){
  5.     wx.showLoading({
  6.       title: '加载中,稍后',
  7.       mask:true  // 显示透明蒙层
  8.     })
  9.     wx.request({
  10.       url: 'http://192.168.71.100:5000',
  11.       method:'GET',
  12.       data:{},
  13.       header:{},
  14.       success:(res)=>{
  15.         wx.hideLoading()
  16.         console.log(res.data)
  17.         this.setData({
  18.           userinfo:res.data,
  19.         })
  20.         console.log(this.data.name)
  21.       },
  22.       fail:(err)=>{},
  23.       complete:(res)=>{}
  24.     })
  25.   },
复制代码

2.2 loading提示框

  1. # 显示
  2. wx.showLoading({
  3.       title: '加载中,稍后',
  4.       mask:true  // 显示透明蒙层
  5.     })
  6.    
  7.    
  8. #关闭
  9. wx.hideLoading()
复制代码
三 对话框

3.1 模态对话框

  1. ##### wxml
  2. <button type="default" size="mini" bind:tap="showModel">弹出模态框</button>
  3. ### js ###
  4. showModel(){
  5.     wx.showModal({
  6.         title: '这是标题',
  7.         content: '这是内容部分~~',
  8.         complete: (res) => {
  9.             if (res.cancel) {
  10.                 console.log('用户取消了')
  11.             }
  12.             if (res.confirm) {
  13.                 console.log('用户确认了')
  14.             }
  15.         }
  16.     })
  17. }
复制代码
3.2 消息对话框

  1. #### wxml
  2. <button type="default" size="mini" bind:tap="showToast">弹出消息框</button>
  3. ### js
  4. showToast(){
  5.     wx.showToast({
  6.         title: '恭喜您,秒杀成功',
  7.         icon:"success",
  8.         duration:2000
  9.     })
  10. }
复制代码
四 存储

  1. #### wxml####
  2. <button type="default" plain bind:tap="handleSave">存储数据</button>
  3. <button type="primary" plain bind:tap="handleGet">获取数据</button>
  4. <button type="default" plain bind:tap="handleDelete">删除数据</button>
  5. <button type="primary" plain bind:tap="handleClear">清空数据</button>
  6. ###js### 同步####
  7. handleSave() {
  8.     wx.setStorageSync('name', "justin")
  9.     wx.setStorageSync('userinfo', {name:'lqz',age:19})
  10. },
  11. handleGet() {
  12.     const name=wx.getStorageSync('name')
  13.     const userinfo=wx.getStorageSync('userinfo')
  14.     console.log(name)
  15.     console.log(userinfo)
  16. },
  17. handleDelete() {
  18.     wx.removeStorageSync('name')
  19. },
  20. handleClear() {
  21.     wx.clearStorageSync()
  22. }
  23. ###js### 异步####
  24. handleSave() {
  25.     wx.setStorage({
  26.         key:'name',
  27.         data:"justin"
  28.     })
  29.     wx.setStorage({
  30.         key:'userinfo',
  31.         data:{name:'lqz',age:19}
  32.     })
  33. },
  34. async handleGet() {
  35.     const name= await wx.getStorage({key:'name'})
  36.     const userinfo= await wx.getStorage({key:'userinfo'})
  37.     console.log(name)
  38.     console.log(userinfo)
  39. },
  40. handleDelete() {
  41.     wx.removeStorage({key:'name'})
  42. },
  43. handleClear() {
  44.     wx.clearStorage()
  45. }
复制代码
五 上拉下拉加载

5.1 下拉加载

  1. ### wxml####
  2. <view wx:for="{{goods}}" wx:key="index">{{item}}</view>
  3. ### wxss###
  4. view{
  5.   height: 400rpx;
  6.   display: flex;
  7.   justify-content: center;
  8.   align-items: center;
  9. }
  10. /* 奇数 */
  11. view:nth-child(odd){
  12.   background-color: pink;
  13. }
  14. /* 偶数 */
  15. view:nth-child(even){
  16.   background-color: green;
  17. }
  18.    
  19. ##### js######
  20. // 监听上拉下载更多
  21. onReachBottom(){
  22.   console.log('上拉了')
  23.   // 发送请求,加载数据
  24.   wx.request({
  25.     url: 'http://192.168.71.100:5000',
  26.     method:'GET',
  27.     success:(res)=>{
  28.       console.log(res)
  29.       this.setData({
  30.         goods:this.data.goods.concat(res.data)
  31.       })
  32.       
  33.     }
  34.   })
  35. }
  36. ####json####
  37. {
  38.   "usingComponents": {},
  39.   "onReachBottomDistance": 50 # 到达底部距离
  40. }
  41. ### 后端flask###
  42. from flask import Flask,jsonify
  43. import random
  44. app=Flask(__name__)
  45. @app.route('/',methods=['GET'])
  46. def index():
  47.     l=[]
  48.     for i in range(3):
  49.         l.append(random.randint(0,9))
  50.     return jsonify(l)
  51. if __name__ == '__main__':
  52.     app.run(host='0.0.0.0')
复制代码
5.2 下拉刷新

  1. ### json####
  2. {
  3.   "usingComponents": {},
  4.   "onReachBottomDistance": 50,
  5.   "enablePullDownRefresh": true, # 开启下拉刷新
  6.   "backgroundColor": "#efefef", #下拉刷新背景色
  7.   "backgroundTextStyle":"dark" # 下拉刷新点颜色
  8. }
  9. #### wxml###
  10. <view wx:for="{{goods}}" wx:key="index">{{item}}</view>
  11. ###js###
  12. // 下拉刷新
  13. onPullDownRefresh(){
  14.   console.log('下拉了')
  15.   this.setData({
  16.     goods:[1,2,3]
  17.   })
  18.   // 在下拉刷新后,loading效果可能没回弹
  19.   if(this.data.goods.length==3){
  20.     wx.stopPullDownRefresh()
  21.   }
  22. }
复制代码
5.3 使用 scroll-view实现

  1. ##### wxml####
  2. <scroll-view
  3. class="scroll"
  4. scroll-y  # 运行y轴滑动
  5. lower-threshold="100" # 距离底部还有100px时,触发事件
  6. bindscrolltolower="handleGetData"# 事件处理函数
  7. refresher-enabled="true"        # 开启 下拉刷新
  8. refresher-default-style="black" # 下拉默认样式
  9. refresher-background="#f0f0f0"  # 下拉背景色
  10. bindrefresherrefresh="handleReload" # 下拉触发事件
  11. refresher-triggered="{{isRefresh}}" # 设置下拉回弹,false允许回弹,
  12. enable-back-to-top="true"  # 快速回到顶部,ios点顶部,安卓点tab
  13. >
  14.   <view wx:for="{{goods}}" wx:key="index">{{item}}</view>
  15. </scroll-view>
  16. ### json###
  17. {
  18.   "usingComponents": {}
  19. }
  20. ###wxss###
  21. .scroll{
  22.   /* 100vh就是指元素的高度等于当前浏览器的视窗高度,即浏览器内部的可视区域的高度大小 */
  23.   height: 100vh;
  24.   background-color: grey;
  25. }
  26. view{
  27.   height: 400rpx;
  28.   display: flex;
  29.   justify-content: center;
  30.   align-items: center;
  31. }
  32. /* 奇数 */
  33. view:nth-child(odd){
  34.   background-color: pink;
  35. }
  36. /* 偶数 */
  37. view:nth-child(even){
  38.   background-color: green;
  39. }
  40.    
  41.    
  42. #### js####
  43.   data: {
  44.     goods:[1,2,3,4],
  45.     isRefresh:false
  46.   },
  47.   handleGetData(){
  48.     console.log('上拉了')
  49.     // 发送请求,加载数据
  50.     wx.request({
  51.       url: 'http://192.168.71.100:5000',
  52.       method:'GET',
  53.       success:(res)=>{
  54.         console.log(res)
  55.         this.setData({
  56.           goods:this.data.goods.concat(res.data)
  57.         })
  58.         
  59.       }
  60.     })
  61.   },
  62.   handleReload(){
  63.     console.log('下拉刷新了')
  64.     wx.showToast({
  65.       title: '下拉刷新',
  66.     })
  67.     this.setData({
  68.       goods:[1,2,3,4]
  69.     })
  70.     this.setData({
  71.       isRefresh:false
  72.     })
  73.   }
复制代码
六 更新和生命周期

6.1 小程序更新

  1. # 1 访问小程序,微信会将小程序代码包,下载到微信本地,打开使用
  2. # 2 当小程序更新版本后,微信会检查小程序版本有没有更新,并下载最新小程序
  3. # 3 更新方式:启动时同步更新,启动时异步更新
  4.         ### 同步更新:
  5.     -启动时同步更新:微信运行时,会定期检查最近使用的小程序是否有更新。如果有更新,下次小程序启动时会同步进行更新,更新到最新版本后再打开小程序。如果 用户长时间未使用小程序时,会强制同步检查版本更新
  6.         -如果更新失败,还是会使用本地版本
  7.         -新版本发布24小时后,基本会覆盖全部用户
  8.     ### 异步更新####
  9.     启动时异步更新:在启动前没有发现更新,小程序每次 冷启动 时,都会异步检查是否有更新版本。如果发现有新版本,将会异步下载新版本的代码包,将新版本的小程序在下一次冷启动进行使用,当前访问使用的依然是本地的旧版本代码
  10.     ## 强制更新###
  11.     在启动时异步更新的情况下,如果开发者希望立刻进行版本更新,可以使用 wx.getUpdateManager API 进行处理。在有新版本时提示用户重启小程序更新新版本
  12.    
  13. # 4 在app.js中加入
  14. App({
  15.   // 生命周期函数,启动小程序就会执行
  16.   onLaunch(){
  17.     const update=wx.getUpdateManager()
  18.     update.onUpdateReady(function(){
  19.       wx.showModal({
  20.         title: '发现新版本',
  21.         content: '重启应用,更新版本新版本?',
  22.         success:(res)=>{
  23.           if(res.confirm){
  24.             update.applyUpdate()
  25.           }
  26.         }
  27.       })
  28.     })
  29.   }
  30. })
复制代码

6.2 应用生命周期

  1. // app.js
  2. App({
  3.   /**
  4.    * 当小程序初始化完成时,会触发 onLaunch(全局只触发一次)
  5.    */
  6.   onLaunch: function () {
  7.     console.log('小程序启动了')
  8.    
  9.   },
  10.   /**
  11.    * 当小程序启动,或从后台进入前台显示,会触发 onShow
  12.    */
  13.   onShow: function (options) {
  14.     console.log('后台切前台了')
  15.   },
  16.   /**
  17.    * 当小程序从前台进入后台,会触发 onHide
  18.    */
  19.   onHide: function () {
  20.     console.log('进后台了')
  21.   },
  22. })
复制代码
6.3 页面生命周期

  1. Page({
  2.   /**
  3.    * 生命周期函数--监听页面加载
  4.    */
  5.   onLoad(options) {
  6.     console.log('1 页面加载了')
  7.   },
  8.   /**
  9.    * 生命周期函数--监听页面初次渲染完成
  10.    */
  11.   onReady() {
  12.     console.log('3 初次渲染完成')
  13.   },
  14.   /**
  15.    * 生命周期函数--监听页面显示
  16.    */
  17.   onShow() {
  18.     console.log('2 页面显示')
  19.   },
  20.   /**
  21.    * 生命周期函数--监听页面隐藏
  22.    */
  23.   onHide() {
  24.     console.log('4 页面隐藏')
  25.   },
  26.   /**
  27.    * 生命周期函数--监听页面卸载
  28.    */
  29.   onUnload() {
  30.     console.log('5 页面卸载')
  31.   },
  32. })
复制代码
七 其他

7.1 分享到朋友圈

  1. // 允许发送到朋友圈,右上角 ... 分享到朋友圈
  2. onShareTimeline(){
  3.     return {
  4.         title:"这是一个神奇的页面",
  5.         query:'name=justin&age=19',
  6.         imageUrl:'/images/b.jpg'
  7.     }
  8. },
复制代码
7.2 转发

  1. # 1 方式一:通过右上方 ...
  2. # 2 方式二:通过按钮, 需要给button设置 open-type="share"
  3. <button open-type="share">转发</button>
  4. # 3 js中编写
  5.   onShareAppMessage() {
  6.     return {
  7.       title:"是朋友就点一下",
  8.       path:"/pages/my/my", //当前转发的页面
  9.       imageUrl:'/images/b.jpg'
  10.     }
  11.   },
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表