wx小程序

177 阅读6分钟

小程序基础

引入文件/组件

image.png 暴露接口 module.exports=A 引入文件(建议使用相对路径) 使用require('./A.js) include 引入 组件 import 引入template模板 使用模板

image.png

内置方法

都放在wx命名空间下,我们通过wx调用

  • wx.login 登录成功过后执行的方法
  • 参数是一个对象,对象中有一个success方法
  • wx.getSetting 获取授权的方法
  • 参数是一个对象 对象中有一个success方法
  • wx.getUserInfo 获取用户信息
  • 参数是一个对象,对象中有一个success方法

全局方法

  • App: 创建应用程序的方法
  • getApp: 获取引用程序的方法
  • Page: 创建页面的方法
  • getCurrentPages: 获取当前页面的方法

常用事件方法

我们通过生命周期说明页面的创建过程

  • onLoad 页面你载入时执行的方法
  • onShow 页面显示时执行的方法
  • onReady 页面渲染完成时执行的方法
  • onHide 页面隐藏时执行的方法
  • onUnload 页面销毁时执行的方法

页面加载时 会按上面的顺序一次执行,当页面切换属性的时候,onShow方法和onHide方法交替执行

常用事件方法

  • onPullDownRefresh : 监听用户下拉动作
  • onReachBottom: 监听也买你触底方法
  • onShareAppMessage: 监听分享方法

数据渲染原理 在微信小程序中,采用双线程模式

  • 视图层的采用webview渲染
  • 业务逻辑层面为js单独开辟一个线程

数据驱动 小程序是基于MVVM模式实现的,因此实现了数据驱动,定义上面数据就渲染什么数据 使用方法

  1. 在脚本文件中通过data属性定义数据
  2. 在页面中沟通过插值语法渲染数据

页面渲染

插值语法{{}}

  • 微信插值语法并没有提供一个真真正正的js环境(伪js环境)
  1. 只能允许简单的运算(加减乘除)
  2. 以及对象获取属性的点语法,数组获取成员中的你给括号语法
  3. 不支持语句(内置的方法)
  • 组件的属性和内容都可以使用插值语法

更新数据(在页面中,想修改绑定的数据,要使用setData方法)

  • this.setData({key,value}) 参数是对象
  • key 表示属性名 小程序对属性名做了拓展 可以表示直接属性,也可以使用间接子属性
  • value表示修改的数据

列如 var obj={a:{b:{c:100}}} a就是obj的直接属性,b和c就是obj的简介子属性,不许要通过a间接的获取,修改c的时候,key可以写成'a.b.c'

data:{
    obj:{
    color:'pink',
    size:{
        width:20,
        height:30
        }
    }
}
//直接修改
this.setData({
       obj:{
    //为了防止属性丢失要重写
    color:'pink',
    size:{
        width:20,
        height:40
        }
    }
}
})
//间接属性语法
this.setData({
    'obj.size.width':40
})

数据丢失

  • 数据驱动就是指数据发生改变 视图就会同步更新,如果数据改变了,但是视图没有更新,此时我们就说数据丢失了,数据丢失产生的原因是直接修改data中的数据,为了避免数据丢失,要通过setData方法去修改
  • 小程序将更具setData修改的数据更新视图,为了提高性能,要尽量减少修改的数据(修改必要的数据)

setData({}) 更新对象 或数组的用法

原数据

menu=[
 {id: "13", price: "22", title: "南洋鸡肉卷套餐", sales: "36", img: "13.jpg",num:0},
 {id: "14", price: "23", title: "菠萝鸡腿堡套餐", sales: "38", img: "14.jpg", num:0},
 {id: "15", price: "29", title: "双鸡堡套餐", sales: "33", img: "15.jpg",num:0}
 ]

更新数据的写法

addNum:function(e){
      let id=e.currentTarget.dataset.id;
      let num=1;
    this.data.menu.forEach((item,index)=>{
        if(item.id==id){
          console.log(item.num)
          let n=+item.num+num;
          if(n>=0){
            this.setData({
              ['menu['+index+'].num']:n
            })
          }
        }
      })
      }

WXML属性

属性分两种

  1. 共有属性(可以为所有组件添加的属性) image.png
  2. 组件属性(可以指定的组件添加的属性,称为特有属性)

WXML事件

在wxml中可以为每一个组件添加事件(添加的事件要在脚本文件中定义出来) 一共分为两种

- 第一种 为每一个组件添加的事件 称为共有事件

共有事件:touchstart touchmove touchend tap longTap(350ms)

- 第二种 为了特定的组件添加的事件 称为特有事件 如表单绑定的submit事件

按照冒泡和非冒泡 事件又分两种 :冒泡事件和非冒泡事件 冒泡:事件执行的时候,从子组件传递到父组件的过程 我们可以通过bind或者catch为组件绑定事件

- bind绑定的事件 会冒泡

- catch绑定的事件 不会冒泡

image.png

事件对象

image.png

image.png

组件

**view 组件 **

image.png

text组件

image.png

rich-text组件 image.png

image组件

image.png

image.png

icon组件 字体图标

image.png

canvas 组件 画布

image.png

map组件 地图

image.png

video组件 媒体播放器 camera组件 摄像头 live-player 直播组件 live-pusher 推送组件

image.png

表单组件

image.png

image.png

image.png

指令

微信中指令的语法 wx:指令名称=""

  • 条件指令 wx:if="" wx:else=""
  • 如果在条件中出现了变量,要使用插值语法(是真正的创建与删除,不是控制元素的显示隐藏)

循环指令wx:for="data" data表示遍历的数据 可以是数组也可以是数字

(一定要设置wx:key="index" 属性值value 必须爆炸数据的唯一性) 在循环的指令中

  • 默认的成员变量名称 item
  • 默认的索引值变量名称 index 我们可以通过指令改变默认的成员以及索引值变量名称
  • wx:for-item:要改变的成员名称
  • wx:for-index:要改变的索引值名称

block组件 模板组件 该组件包裹内容本身不会渲染出来(相当于vue的template模板指令 包裹子元素 本身不会渲染到页面上)

templage组件 用于定义模板组件

image.png

templage 用法

image.png

scroll-view 组件 滚动区域

image.png

image.png

swiper组件

image.png

movable-area组件 用于定义可移动的区域

image.png

image.png

cover-view组件 用来遮盖源生组件

image.png

image.png

open-data组件 用来定义开放组件 开放用户的信息

image.png

image.png

web-view组件 用来引入一个html页面渲染

image.png

image.png

wxs组件

image.png

  • 先定义 image.png
  • 在使用 image.png

wxss与rpx

image.png rpx 是微信小程序解决自适应屏幕尺寸的尺寸单位。微信小程序规定屏幕的宽度为750rpx。 无论是在iPhone6上面还是其他机型上面都是750rpx的屏幕宽度,拿iPhone6来讲,屏幕宽度为375px,把它分为750rpx后, 1rpx = 0.5px。

flex布局

image.png

API

同步写法与异步写法 image.png

本地存储

image.png 本地存储设置数据

image.png

image.png

页面类型

image.png

路由

  • 有两种路由方式

image.png

  • 用法 image.png

image.png

image.png

  • 路由方法 image.png

堆栈

image.png

指南针

image.png