一.介绍
1.与普通网页开发区别
1.API 不同
由于运行环境的不同,所以小程序中无法调用 DOM 和 BOM 的 API。但是,小程序中可以调用微信环境提供的各种 API,例如:
-
地理定位
-
扫码
-
支付
2.体验小程序
可使用手机微信(6.7.2 及以上版本)扫码下方小程序码,体验小程序:
3.注册小程序账号
1.微信小程序AppID在哪找
4.安装微信开发者工具
登录
5.从头创建一个小程序项目
填写自己的APPID: wx41f51df697bd2602
二.微信小程序基础
1.目录介绍
1.pages页面
-
由四个基本文件组成
-
新建页面:在app.json中新加page路径,小程序会自动创建页面
1.index.js
-
页面脚本文件,存放页面的数据,事件处理函数等
-
页面交互逻辑,数据
-
步骤
-
使用page创建文件
-
页面删除后
-
一定要在app.json配置文件中删除对应页面,不然会报错
-
-
"pages":[ "pages/index/index", "pages/logs/logs" ]
2.index.json
-
是什么
-
当前页面配置文件,配置窗口的外观,表现等
-
页面相关配置文件
-
-
常用
-
nav...text:配置当前页面标题
-
3.index.wxml
-
是什么
-
页面的模板结构文件
-
html,组件,代码,根据微信小程序提供的组件构建
-
-
一些常用组件
-
view-相当于div
-
text-相当于span
-
-
常用逻辑
-
判断
-
在微信小程序中为
-
wx:if="{{flag}}"
-
wx:else
-
-
-
循环
-
wx:for="{{list}}" 默认{{item.name}}
-
可以将item改成指定 wx:for-item="person" 则循环变量为{{person.name}}
-
-
-
4.index.wxss
-
是什么
-
当前页面的样式表文件
-
页面样式
-
2.utils工具包
utils用来存放工具性质的模块(例如:格式化时间的自定义模块)
3.app.js入口文件
-
是什么
-
小程序项目入口文件
-
-
作用
-
初始化操作,获取用户信息
-
基本结构 使用App构建
-
4.app.json 配置文件
-
是什么
-
小程序项目全局配置文件
-
包括了小程序的所有页面路径,窗口外观没界面表现,底部tab等
-
-
作用
-
配置路径,窗口表现
-
-
默认配置为四项
-
Demo项目里边的app.json配置内容如下:
{ "pages": [ "pages/index/index", "pages/logs/logs" ], "window": { "backgroundTextStyle": "light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": "WeChat", "navigationBarTextStyle" "black" }, "style": "v2", "sitemapLocation": "sitemap.json" }
-
简单了解下这四个配置项的作用
-
pages: 用来记录当前小程序所有页面的路径
-
window: 全局定义小程序所有页面的背景色,文字颜色等
-
style: 全局定义小程序组件所使用的样式版本
-
sitemapLocation: 用来指明 sitemap.json的位置
-
-
5.wxss全局样式文件
-
是什么
-
小程序项目的全局配置文件
-
将之前前端css文件换成wxss文件
-
6.project.config.json项目配置文件
-
是什么
-
是项目配置文件,用来记录我们对小程序开发工具所做的个性化配置
-
例如
-
setting 中保存了编译相关的配置
-
projectname 中保存的是项目名称
-
appid中保存的是小程序的账号ID
-
-
此处配置
7.shemap.json
-
是什么
-
配置哪些页面可以被微信的搜索引擎给收入,以及收入规则
-
微信现已开放小程序内搜索,效果类似于PC网页的SEO
-
sitemap.json文件用来配置小程序页面是否允许微信索引
-
当开发者允许微信索引时,微信会通过爬虫的形式,为小程序的页面内容建立索引.当用户的搜索关键字和页面的索引匹配成功的时候,小程序的页面将可能展示在搜索框中
-
注意,sitemap的索引提示是默认开启的,如需要关闭sitemap的索引提示,可在小程序项目配置文件project.config.json的setting中配置子段checkSiteMap为false
-
-
-
配置
{ "desc": "关于本文件的更多信息,请参考文档.......", "rules": [{ "action": "allow", //"action":"disallow" 不允许被索引 "page": "*" }] }
2.目录介绍2
1.三种.js文件
-
小程序中的JS文件分为三大类,分别是
-
app.js
-
是整个小程序项目的入口文件,通过调用App()函数来启动整个小程序
-
-
页面的.js文件
-
是页面的入口文件,通过调用Page()函数来创建并运行页面
-
-
普通的.js文件
-
是普通的功能模块文件,用来封装公共的函数或属性供页面使用
-
-
2. .json文件
-
小程序中的每一个页面,可以使用 json 文件来对本页面的窗口外观进行配置,页面中的配置会覆盖app.json 的 window 中相同的配置项。
3. .wxml文件
-
和html区别
-
标签名称不同
-
HTML(div,span,img,a)
-
WXML(view,text,image,navigator)
-
-
属性节点不同
-
<a href="#">超链接</a>
-
<navigator url="/page/home/home"></navigator>
-
-
提供了类似于Vue中的模板语法
-
数据绑定
-
列表渲染
-
条件渲染
-
-
4. .wcss文件
-
和css区别
-
新增了 rpx 尺寸单位
-
CSS中需要手动进行像素单位换算,例如rem
-
WXSS在底层支持新的尺寸单位rpx,在不同大小的屏幕上小程序会自动进行换算
-
-
提供了全局的样式和局部样式
-
项目根目录中的app.wxss 会作用于所有小程序页面
-
局部页面的wxss样式仅对当前页面生效
-
-
WXSS 仅支持部分 CSS 选择器
-
.class和 #id
-
element
-
并集选择器、后代选择器
-
::after和::before 等伪类选择器
-
-
三.小程序-模板与配置
1.WXML 模板语法
1.数据绑定
1.Mustache语法:{{ }} 即插值表达式
-
与vue区别:
-
vue中绑定使用v-bind,简写为冒号,但小程序中都需要使用Mustache语法
页面数据
//页面数据: Page({ data: { imgSrc: 'http://www.....' } })
页面结构
//页面结构 <image src="{{ imgSrc }}"></image>
2.三元运算
-
页面数据
Page({ data: { randomNum:Math.random()*10 } })
-
页面结构
<view>{{ randomNum>=5 ? '大于等于5' : '小于5' }}</view>
3.算数运算
-
页面数据
Page({ data: { randomNum: Math.random().toFixed(2)//生成一个带两位小数的随机数,例如0.34 } })
-
页面结构
<view>生成100以内的随机数{{ randomNum*100 }}</view>
2.事件绑定
1. 什么是事件
2.小程序中常用的事件
类型 | 绑定方式 | 事件描述 |
---|---|---|
tap | bindtap或bind:tap | 手指触摸后马上离开,类似于HTML中的click事件 |
input | bindinput或bind:input | 文本框的输入事件 |
change | bindchange或bind:change | 状态改变时触发 |
1.bindtab语法格式
在小程序中,不存在 HTML 中的 onclick 鼠标点击事件,而是通过 tap 事件来响应用户的触摸行为。通过 bindtap,可以为组件绑定 tap 触摸事件,语法如下:
-
通过 bindtap,可以为组件绑定 tap 触摸事件,语法如下
<button type="primary" bindtap="btnTapHandler">按钮</button>
-
在页面的 .js 文件中定义对应的事件处理函数,事件参数通过形参 event (一般简写成 e) 来接收
Page({ btnTapHandler(e) { //按钮的 tap 事件处理函数 console.log(e) //事件参数对象 e } })
2.bindinput语法格式
在小程序中,通过 input 事件来响应文本框的输入事件,语法格式如下:
-
通过 bindinput,可以为文本框绑定输入事件:
<input bindinput="inputHandler"><input>
-
在页面的.js文件中定义事件处理函数
inputHandler(e){ // e.detail.value 是变化过后文本框最新的值 console.log(e.detail.value) }
实现文本框和data之间数据同步
-
实现步骤:
-
定义数据
-
渲染结构
-
美化样式
-
绑定input事件处理函数
-
-
iptHandler(e){ this.setData({ //通过 e.detail.value获取到文本框最新的值 msg: e.detail.value }) }
3.事件对象的属性列表
-
当事件回调触发的时候,会收到一个事件对象event,它的详细属性如下表所示
属性 类型 说明 type String 事件类型 timeStamp Integer 页面打开到触发事件所经过的毫秒数 target Object 触发事件的组件的一些属性值集合 currentTarget Object 当前组件的一些属性值集合 detail Object 额外的信息 touches Array 触摸事件,当前停留在屏幕中的触摸点信息的数组 changedTouches Array 触摸事件,当前变化的触摸点信息的数组
target和currentTarget的区别
-
target 是触发该事件的源头组件,而 currentTarget 则是当前事件所绑定的组件。举例如下:
-
点击内部的按钮时,点击事件以冒泡的方式向外扩散,也会触发外层 view 的 tap 事件处理函数。此时,对于外层的 view 来说:
-
e.target 指向的是触发事件的源头组件,因此,e.target 是内部的按钮组件
-
e.currentTarget 指向的是当前正在触发事件的那个组件,因此,e.currentTarget 是当前的 view 组件
-
-
一般只会用到target
4.在事件处理函数中为data中的数据赋值
-
通过调用 this.setData(dataobject) 方法,可以给页面 data 中的数据重新赋值,示例如下:
Page({ data:{ count: 0 }, //修改count的值 changeCount(){ this.setData({ count: this.data.count+1 }) } })
5.事件传参
-
小程序中的事件传参比较特殊,不能在绑定事件的同时为事件处理函数传递参数。例如,下面的代码将不能正常工作:
<button type="primary" bindtap="btnHandler(123)">时间传参</button>
-
因为小程序会把 bindtap 的属性值,统一当作事件名称来处理,相当于要调用一个名称为 btnHandler(123)的事件处理函数。
-
可以为组件提供 data-* 自定义属性传参,其中*代表的是参数的名字,示例代码如下:
<button bindtap="btnHandler" data-info={{ 2 }}></button>
-
"{{2}}"会被解析为数字2,而"2"则会被解析为字符串
-
最终:
-
info会被解析为参数的名字
-
数值2会被解析为参数的值
-
-
-
事件处理函数中,通过 event.target.dataset.参数名 即可获取到具体参数的值,示例代码如下:
btnHandler(event){ //dataset 是一个对象,包含了所有通过 data-*传递过来的参数项 console.log(event.target.dataset) //通过 dataset 可以访问到具体参数的值 console.log(event.target.dataset.info) }
3.条件渲染
1.如何使用
-
在小程序中,使用 wx:if="{{condition}"来判断是否需要渲染该代码块
<view wx:if="{{condition}}"> True </view>
-
也可以用 wx:elif 和 wx:else 来添加 else 判断:
<view wx:if="{{type == 1}}">男</view> <view wx:elif="{{type === 2}}">女</view> <view wx:else>保密</view>
2.结合< block>使用wx:if
-
如果要一次性控制多个组件的展示与隐藏,可以使用一个<block></block> 标签将多个组件包装起来,并在<block>标签上使用 wx:if 控制属性,示例如下
<block wx:if="{{true}}"> <view></view> <view></view> </block>
-
注意: <block> 并不是一个组件,它只是一个包裹性质的容器,不会在页面中做任何渲染,
3.hidden
-
在小程序中,直接使用 hidden="{{ condition ]"也能控制元素的显示与隐藏
<view hidden="{{ condition }}">条件为true隐藏,条件为false 显示</view>
4.wx:if与hidden的对 比
-
运行方式不同
-
wx:if 以动态创建和移除元素的方式,控制元素的展示与隐藏
-
hidden 以切换样式的方式(display: none/block;),控制元素的显示与隐藏
-
-
使用建议
-
频繁切换时,建议使用 hidden
-
控制条件复杂时,建议使用 wx:if 搭配 wx:elif、wx:else 进行展示与隐藏的切换
-
4.列表渲染
1.wx:for
-
通过wx:for 可以根据指定的数组,循环染重复的组件结构,语法示例如下
<view wx:for="{array}"> 索引是: {{index}} 当前项是: {{item}} </view>
-
默认情况下,当前循环项的索引用 index 表示;当前循环项用 item 表示
-
2.手动指定索引和当前项的变量名*
-
使用 wx:for-index 可以指定当前循环项的索引的变量名
-
使用 wx:for-item 可以指定当前项的变量名
<view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName"> 索引是: {{idx}} 当前项是: {{itemName}} </view>
3,wx:key的使用
-
类似于 Vue 列表渲染中的 :key,小程序在实现列表染时,也建议为渲染出来的列表项指定唯一的 key 值,从而提高渲染的效率,示例代码如下:
//data数据 data: { userList: [ { id:1, name: '小红'}, { id:2, name: '小黄'}, { id:3, name: '小白'}, ] }
//wxml结构 <view wx:for="{{userList}}" wx:key="id">{{item.name}}</view>
-
wx:key="id" //不用使用Mustache语法
2.WXSS 模板样式
1.是什么
-
WXSS(WeiXin Stvle Sheets)是一套样式语言,用于美化 WXML 的组件样式,类似于网页开发中的CSS
2.WXSS和CSS的关系
-
WXSS具有CSS大部分特性,同时,WXSS 还对 CSS 进行了扩充以及修改,以适应微信小程序的开发。
-
与 CSS 相比,wXSS 扩展的特性有:
-
rpx 尺寸单位
-
@import 样式导入
-
-
例如rem只能在网页开发中使用,小程序无法使用
3.rpx
1.什么是rox尺寸单位
rpx (responsive pixel) 是微信小程序独有的,用来解决屏适配的尺寸单位
2.rpx的实现原理
rpx 的实现原理非常简单: 鉴于不同设备屏幕的大小不同,为了实现屏幕的自动适配,rpx 把所有设备的屏幕在宽度上等分为 750 份 (即: 当前屏幕的总宽度为 750rpx)。
-
在较小的设备上,1rpx 所代表的宽度较小
-
在较大的设备上,1rpx 所代表的宽度较大
小程序在不同设备上运行的时候,会自动把 rpx 的样式单位换算成对应的像素单位来渲染,从而实现屏幕适配
3.rpx与px之间单位换算*
在iphone6 上,屏幕宽度为375px,共有 750 个物理像素,等分为 750rpx。则:750rpx = 375px = 750 物理像素 1rpx = 0.5px =1物理像素
-
官方建议:开发微信小程序时,设计师可以用 iphone6 作为视觉稿的标准
-
开发举例:在iPhone6 上如果要绘制宽100px,高20px的盒子,换算成rpx单位,宽高分别为 200rpx 和 40rpx。
4.样式导入
1.什么是样式导入
使用 WXSS 提供的 @import 语法,可以导入外联的样式表。
2.@import的语法格式
@import 后跟需要导入的外联样式表的相对路径,用;表示语句结束。示例如下
/** common.wxss **/ .small-p { padding:5px; }
/** app.wxss **/ @import "common.wxss"; .middle-p{ padding:15px; }
5.全局样式和局部样式
1.全局样式
2.局部样式
-
注意
-
当局部样式和全局样式冲突时,根据就近原则,局部样式会覆盖全局样式
-
当局部样式的权重大于或等于全局样式的权重时,才会覆盖全局的样式
-
3.全局配置
1.全局配置文件及常用的配置项
小程序根目录下的 app.json 文件是小程序的全局配置文件。常用的配置项如下
1.pages
-
记录当前小程序所有页面的存放路径
2.window
1.认识window节点
-
全局设置小程序窗口的外观
-
即导航栏区域和北京区域内容由window配置,页面主体区域用wxml配置
2.了解window节点常用的配置项
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
navigationBarTitleText | String | 字符串 | 导航栏标题文字内容 |
navigationBarBackgroundColor | HexColor | #000000 | 导航栏背景颜色 如#000000 |
navigationBarTextStyle | String | white | 导航栏标题颜色,仅支持black/white |
backgroundColor | HexColor | #ffffff | 窗口的背景色 |
backgroundTextStyle | String | dark | 下拉loading的样式,仅支持dark/light |
enablePullDownRefresh | Boolean | false | 是否全局开启下拉刷新 |
onReachBottomDistance | Number | 50 | 页面上拉出地时间触发式距页面底部的距离,单位为px |
-
注意: navigationBarTextStyle 的可选值只有 black 和 white
-
全局开启下拉刷新功能"enablePullDownRefresh": true
关于模拟器的问题说明
不能百分百还原,要真机预览
3.tabBar
-
设置小程序底部的 tabBar 效果
1.什么是tabBar
-
tabBar 是移动端应用常见的页面效果,用于实现多页面的快速切换。小程序中通常将其分为:
-
底部 tabBar
-
顶部 tabBar
-
-
注意:
-
tabBar中只能配置最少2个、最多 5个tab 页签
-
当渲染顶部 tabBar 时,不显示 icon,只显示文本
-
2.tabBar的六个组成部分
-
backgroundColor: tabBar 的背景色
-
selectedlconPath: 选中时的图片路径
-
borderStyle: tabBar 上边框的颜色
-
iconPath:未选中时的图片路径
-
selectedColor: tab 上的文字选中时的颜色
-
color: tab 上文字的默认 (未选中)颜色
3.tabBar节点的配置项
属性 | 类型 | 必填 | 默认值 | 描述 |
---|---|---|---|---|
posion | String | 否 | bottom | tabBar的位置,仅支持bottom/top |
borderStyle | String | 否 | black | tabBar上边框的颜色,仅支持black/white |
color | HexColor | 否 | tab上文字的默认(未选中)的颜色 | |
selectedColor | HexColor | 否 | tab上文字选中时的颜色 | |
backgroundColor | HexColor | 否 | tabBar的背景色 | |
list | Array | 是 | tab页签的列表,最少2个,最多5个tab |
每个tab项的配置选项
属性 | 类型 | 必填 | 描述 |
---|---|---|---|
pagePath | String | 是 | 页面路径,页面必须在pages中先预定义 |
text | String | 是 | tab上显示的文字 |
iconPath | String | 否 | 未选中时的图标路径,当posion为top时,不显示icon |
selectedIconPath | String | 否 | 选中时的图标路径,当posion为top时,不显示icon |
4.style
-
是否启用新版的组件样式
4.页面配置
页面配置中常用的配置项
属性 | 类型 | 默认值 | 描述 |
---|---|---|---|
navigationBarBackgroundColor | HexColor | #000000 | 当前页面导航栏背景颜色,如#000000 |
navigationBarTextStyle | String | white | 当前页面导航栏标题颜色,仅支持black/white |
navigationBarTitleText | String | 当前页面导航栏标题文字内容 | |
backgroundColor | HexColor | #ffffff | 当前页面窗口的背景色 |
backgroundTextStyle | String | dark | 当前页面下拉loading的样式,仅支持dark/light |
enablePullDownRefresh | Boolean | false | 是否为当前页面开启下拉刷新的效果 |
onReachBottomDistance | Number | 50 | 页面上拉触底事件触发时距页面底部距离,单位为px |
5.网络数据请求
1.小程序中网络数据请求的限制
-
出于安全性方面的考虑,小程序官方对数据接口的请求做出了如下两个限制:
-
只能请求 HTTPS 类型的接口
-
必须将接口的域名添加到信任列表中
-
2.配置request合法域名
-
配置步骤:
-
需求描述:假设在自己的微信小程序中,希望请求 刘龙彬的博客 域名下的接口
-
登录微信小程序管理后台 -> 开发 -> 开发设置 -> 服务器域名 -> 修改 request 合法域名
-
注意事项:
-
域名只支持 https 协议
-
域名不能使用IP地址或 localhost
-
域名必须经过ICP备案
-
服务器域名一个月内最多可申请 5次修改
-
-
3.网络数据请求
1,发起GET请求
-
调用微信小程序提供的 wx.request()方法,可以发起 GET 数据请求,示例代码如下:
wx.request({ url: 'https:www.......' //请求的接口地址,必须基于https协议 method:'GET' //请求的方式 data :{ name:'zs', age:22 }, success: (res) => { //请求成功之后的回调函数 console.log(res) } })
2.发起post请求
-
调用微信小程序提供的 wx.request()方法,可以发起 POST 数据请求,示例代码如下:
wx.request({ url: 'https:www.......' //请求的接口地址,必须基于https协议 method:'POST' //请求的方式 data :{ name:'ls', gender: '男' }, success: (res) => { //请求成功之后的回调函数 console.log(res) } })
在页面刚加载时请求数据
-
在很多情况下,我们需要在页面刚加载的时候,自动请求一些初始化的数据。此时需要在页面的 onLoad 事件中调用获取数据的函数,示例代码如下:
//生命周期函数--监听页面加载 onLoadLfunction(options){ this.getSwiperList() this.getGridList() } //获取轮播图的数据 getSwiperList(){...}, //获取九宫格的数据 getGridList(){...}
4.跳过request合法域名校验
如果后端程序员仅仅提供了 http 协议的接口、暂时没有提供 https 协议的接口 此时为了不耽误开发的进度,我们可以在微信开发者工具中,临时开启,开发环境不校验请求域名、TLS 版本及 HTTPS 证书,选项跳过 request合法域名的校验。 注意: 跳过 request 合法域名校验的选项,仅限在开发与调试阶段使用!
5.关于跨域和Ajax的说明
-
跨域问题只存在于基于浏览器的 web 开发中。由于小程序的宿主环境不是浏览器,而是微信客户端,所以小程序中不存在跨域的问题。
-
Ajax 技术的核心是依赖于浏览器中的 XMLHttpRequest 这个对象,由于小程序的宿主环境是微信客户端,所以小程序中不能叫做“发起 Ajax 请求”,而是叫做“发起网络数据请求
四.视图与逻辑
-
能够知道如何实现页面之间的导航跳转
-
能够知道如何实现下拉刷新效果
-
能够知道如何实现上拉加载更多效果
-
能够知道小程序中常用的生命周期函数
1.页面导航
1.小程序中实现页面导航的两种方式
1.声明式导航
-
在页面上声明一个<navigator> 导航组件
-
通过点击<navigator> 组件实现页面跳转
1.导航到tabBar页面
tabBar 页面指的是被配置为 tabbar 的页面 在使用<navigator> 组件跳转到指定的 tabBar 页面时,需要指定 url 属性和 open-type 属性,其中
-
url表示要跳转的页面的地址,必须以 /开头
-
open-type 表示跳转的方式,必须为 switchTab
2.导航到非tabBar页面
非 tabBar 页面指的是没有被配置为 tabBar 的页面在使用<navigator> 组件跳转到普通的非 tabBar 页面时,则需要指定 url属性和 open-type 属性,其中
-
url 表示要跳转的页面的地址,必须以 /开头
-
open-type 表示跳转的方式,必须为 navigate,或省略
3.后退导航
如果要后退到上一页面或多级页面,则需要指定 open-type 属性和 delta 属性,其中
-
open-type 的值必须是 navigateBack,表示要进行后退导航
-
delta 的值必须是数字,表示要后退的层级,(可省略,因为默认为1)
2.编程式导航
-
调用小程序的导航API,实现页面的跳转
1.导航到tabBar页面
调用 wx.switchTab(0bject object) 方法,可以跳转到 tabBar 页面。其中 0bject 参数对象的属性列表如下:
属性 | 类型 | 是否必选 | 说明 |
---|---|---|---|
url | string | 是 | 需要跳转的tabBar页面的路径,路径后不能带参数 |
success | function | 否 | 接口调用成功的回调函数 |
fail | function | 否 | 接口调用失败的回调函数 |
complete | function | 否 | 接口调用结束的回调函数(调用成功,失败都会执行) |
2.导航到非tabBar页面
调用 wx.navigateTo(object object)方法,可以跳转到非 tabBar 的页面。其中 Object 参数对象的属性列表
属性 | 类型 | 是否必选 | 说明 |
---|---|---|---|
url | string | 是 | 需要跳转的非tabBar页面的路径,路径后不能带参数 |
success | function | 否 | 接口调用成功的回调函数 |
fail | function | 否 | 接口调用失败的回调函数 |
complete | function | 否 | 接口调用结束的回调函数(调用成功,失败都会执行) |
3.后退导航
调用 wx.navigateBack(0bject object)方法,可以返回上一页面或多级页面。其中 bject 参数对象可选 属性列表如下:
属性 | 类型 | 默认值 | 是否必选 | 说明 |
---|---|---|---|---|
delta | number | 1 | 否 | 返回的页面数,如果delta大于现有页面数,则返回到首页 |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功,失败都会执行) |
2.导航传参
1.声明式导航传参
navigator 组件的 url属性用来指定将要跳转到的页面的路径。同时,路径的后面还可以携带参数
-
参数与路径之间使用?分隔
-
参数键与参数值用 =相连
-
不同参数用 & 分隔
代码示例如下:
<navigator url="/pages/info/info?name=zs&age=20"></navigator>
2.编程式导航传参
调用 wx.navigateTo(object object) 方法跳转页面时,也可以携带参数,代码示例如下:
//页面结构 <button bindtap="gotoInfo2">跳转到info页面</button>
//通过编程式导航,跳转到info页面,并携带参数 gotoInfo2(){ wx.navigateTo({ url:'/pages/info/info?name=ls&gender=男' }) }
2.页面事件
1.下拉刷新事件
开启下拉刷新。。。etc在配置中有讲过
1. 监听页面的下拉刷新事件
在页面的 js 文件中,通过 onPullDownRefresh() 函数即可监听当前页面的下拉刷新事件
//页面相关事件处理函数--监听用户下拉动作 onPullDownRefresh: function(){ }
2.停止下拉刷新效果
当处理完下拉刷新后,下拉刷新的 loading 效果会一直显示,不会主动消失,所以需要手动隐藏loading 效果。此时,调用 wx.stopPullDownRefresh() 可以停止当前页面的下拉刷新。示例
onPullDownRefresh: function(){ this.setData({ count:0 }) wx.stopPullDownRefresh() }
2.上拉触底事件
上拉触底是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为。
1.监听页面的上拉触底事件
在页面的 .js 文件中通过 onReachBottom() 函数即可监听当前页面的上拉触底事件
2.配置上拉触底距离
上拉触底距离指的是触发上拉触底事件时,滚动条距离页面底部的距离可以在全局或页面的.json 配置文件中,通过 onReachBottomDistance 属性来配置上拉触底的距离
3.生命周期
1.生命周期的分类
在小程序中,生命周期分为两类,分别是:
-
应用生命周期
-
特指小程序从启动 -> 运行-> 销毁的过程
-
-
页面生命周期
-
特指小程序中,每个页面的加载 -> 染-> 销毁的过程
-
-
其中,页面的生命周期范围较小,应用程序的生命周期范围较大,如图所示
2.什么是生命周期函数
-
生命周期函数:是由小程序框架提供的内置函数,会伴随着生命周期,自动按次序执行
-
生命周期函数的作用:允许程序员在特定的时间点,执行某些特定的操作。例如,页面刚加载的时候,可以在onLoad 生命周期函数中初始化页面的数据
-
注意:生命周期强调的是时间段,生命周期函数强调的是时间点
3.生命周期函数的分类
1.应用的生命周期函数
在app.js中声明
App //回车自动调用生成
//app.js文件 App({ //小程序初始化完成时,执行此函数,全局只触发一次,可以做一些初始化的工作 onLaunch: function(options){}, //小程序启动,或从后台进入前台显示时触发 onShow : function(options){}, //小程序从前台进入后台时触发 onHide: function(){} })
2.页面的生命周期函数
在.js文件中声明
Page({ onLoad: function(options){},//监听页面加载,一个页面只调用一次 onShow:function(){},//监听页面显示 onReady:function(){},//监听页面初次渲染完成,一个页面只调用一次 onHide:function(){},//监听页面隐藏 onUnload:function(){}//监听页面卸载,一个页面只调用一次 })
onReady:页面初次渲染完成时触发。一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互注意: 对界面内容进行设置的 API 如wx.setNavigationBaritle,请在 onReady 之后进行。
4.WXS脚本
1.什么是WXS?
WXS(WeiXin Script)是小程序独有的一套脚本语言,结合 WXML,可以构建出页面的结构
2.wxs的应用场景
wxml 中无法调用在页面的 js 中定义的函数,但是wxml 中可以调用 wxs 中定义的函数。因此,小程序中wxs 的典型应用场景就是“过滤器"
3.wxs和js的关系
虽然wxs 的语法类似于JavaScript,但是 wxs 和JavaScript 是完全不同的两种语言:
-
wxs 有自己的数据类型
-
number 数值类型、string 字符串类型、boolean 布尔类型、object 对象类型
-
function 函数类型、array 数组类型、date 日期类型、regexp 正则
-
-
wxs 不支持类似于 ES6 及以上的语法形式
-
不支持:let、const、解构赋值、展开运算符、箭头函数、对象属性简写、etc...
-
支持:var 定义变量、普通 function 函数等类似于ES5的语法
-
-
wxs 遵循 CommonJS 规范
-
module 对象5
-
require()函数
-
module.exports 对象
-
4.内嵌wxs脚本
wxs代码可以编写在 wxml文件中的<wxs>标签内,就像javascript 代码可以编写在 html文件中的<script>标签内一样。
wxml文件中的每个<wxs></wxs>标签,必须提供 module 属性,用来指定当前 wxs 的模块名称,方便在wxm[中访问模块中的成员:
5.定义外联的wxs脚本
wxs 代码还可以编写在以wxs 为后缀名的文件内,就像javascript 代码可以编写在以js 为后缀名的文件中一样。
可以写在utils文件夹中
示例代码如下:
6.使用外联的wxs脚本
在 wxml中引入外联的 wxs 脚本时,必须为<wxs> 标签添加 module 和 src 属性,其中:
-
module 用来指定模块的名称
-
src 用来指定要引入的脚本的路径,且必须是相对路径
7.WXS的特点
1.与JavaScript 不同
为了降低 wxs (WeiXin Script)的学习成本,wxs 语言在设计时借大量鉴了JavaScript 的语法。但是本质上wxs和JavaScript 是完全不同的两种语言
2.不能作为组件的事件回调
wxs典型的应用场景就是“过滤器经常配合 Mustache 语法进行使用,例如:
但是,在 wxs 中定义的函数不能作为组件的事件回调函数。例如,下面的用法是错误的:
3.隔离性
隔离性指的是wxs的运行环境和其他JavaScript代码是隔离的。体现在如下两方面
-
wxs不能调用js中定义的函数
-
wxs不能调用小程序提供的AP
4.性能好
-
在ios 设备上,小程序内的 WXS 会比JavaScript 代码快 2~ 20 倍
-
在 android 设备上,二者的运行效率无差异
五.基础加强
-
能够知道如何自定义小程序组件
-
能够知道小程序组件中 behaviors 的作用
-
能够知道如何安装和配置vant-weapp 组件库
-
能够知道如何使用Mobx 实现全局数据共享
-
能够知道如何对小程序的API进行 Promise 化
宿主环境
1.什么是宿主环境
2.小程序宿主环境包含的内容
1.通信模型
小程序中通信模型分为两部分:
1.渲染层和逻辑层之间的通信
2.逻辑层和第三方服务器之间的通信
2.运行机制
1.小程序启动过程:
-
把小程序的代码包下载到本地
-
解析 app.json 全局配置文件
-
执行 app.js 小程序入口文件,调用 App() 创建小程序实例
-
渲染小程序首页
-
小程序启动完成
2.页面渲染过程
-
加载解析页面的json配置文件
-
加载页面的.wxml模板和wxss样式
-
执行页面的 .js 文件,调用 Page() 创建页面实例
-
页面渲染完成
3.组件
小程序中的组件也是由宿主环境提供的,开发者可以基于组件快速搭建出漂亮的页面结构。官方把小程序的组件分为了9 大类,分别是:
1.视图容器
常用的视图容器类组件
1.view
1 描述
-
普通视图区域
-
类似于HTML中的 div,是一个块级元素
-
常用来实现页面的布局效果
2 view组件基本使用
2.scroll-view
1 描述
-
可滚动的视图区域
-
常用来实现滚动列表效果
2 scroll-view基本使用
3.swiper和swiper-item
1 描述
轮播图容器组件 和轮播图 item 组件
2 swiper 和 swiper-item组件的基本使用
3 swiper组件常用属性
属性 | 类型 | 默认值 | 说明 |
---|---|---|---|
indicator-dots | boolean | false | 是否显示面板指示点 |
indicator-color | color | rgba(0,0,0,.3) | 指示点颜色 |
indicator-active-color | color | #000000 | 当前选中的指示点颜色 |
autoplay | boolran | false | 是否自动切换 |
interval | number | 5000 | 自动切换时间间隔 |
circular | boolean | false | 是否采用衔接滑动 |
2.基础内容
常用的基础内容组件
1.text
1.描述:
-
文本组件
-
类似于HTML中的 span 标签,是一个行内元素
2.基本使用--长按选中效果:
加属性 selectable
2. rich-text
1.描述
-
富文本组件
-
支持把HTML字符串渲染为 WXML结构
2.基本使用
node标签
3.表单组件
4.导航组件
5.媒体组件
6.map地图组件
7.canvas画布组件
8.开放能力
9.无障碍访问
10.其他常用组件
1. button
1.描述
-
按钮组件
-
功能比 HTML中的 button 按钮丰富
-
通过 open-type 属性可以调用微信提供的各种功能(客服、转发、获取用户授权、获取用户信息等
2.基本使用
2. image
1.描述
-
图片组件
-
image组件默认宽度约300px、高度约240px
2.基本使用
3.属性值mode
3.navigator(后面讲)
1.描述
-
页面导航组件
-
类似干HTML中的a链接
4.API
小程序中的 API 是由宿主环境提供的,通过这些丰富的小程序 AP1,开发者可以方便的调用微信提供的能力例如:获取用户信息、本地存储、支付功能等。
小程序官方把API分为了如下三大类:
1.事件监听API
-
特点:以 on 开头,用来监听某些事件的触发
-
举例: wx.onWindowResize(function callback) 监听窗口尺寸变化的事件
2.同步API
-
特点:以Sync 结尾的API都是同步 API
-
特点2: 同步 API 的执行结果,可以通过函数返回值直接获取,如果执行出错会抛出异常
-
举例: wx.setStorageSync(key,value')向本地存储中写入内容
3.异步API
-
特点: 类似于jQuery 中的 $.ajax(options)函数,需要通过 success、fail、complete 接收调用的结果
-
举例: wx.request()发起网络数据请求,通过 sucess 回调函数接收数据
协同工作
1.了解权限管理需求
在中大型的公司里,人员的分工非常仔细:同一个小程序项目,一般会有不同岗位、不同角色的员工同时参与设计与开发。 此时出于管理需要,我们迫切需要对不同岗位、不同角色的员工的权限进行边界的划分,使他们能够高效的进行协同工作。
2.了解项目成员的组织结构
开发者权限(我们)
-
开发者权限:可使用小程序开发者工具及对小程序的功能进行代码开发
-
体验者权限:可使用体验版小程序
-
登录权限:可登录小程序管理后台,无需管理员确认
-
开发设置:设置小程序服务器域名、消息推送及扫描普通链接二维码打开小程序
-
腾讯云管理:云开发相关设置
添加项目成员和体验成员
3.小程序开发流程
发布
1.软件开发过程中的不同版本
在软件开发过程中,根据时间节点的不同,会产出不同的软件版本,例如:
-
开发者编写代码的同时,对项目代码进行自测(开发版本)
-
直到程序达到一个稳定可体验的状态时,开发者把体验版本给到产品经理和测试人员进行体验测试
-
最后修复完程序的 Bug 后,发布正式版供外部用户使用
2.小程序的版本
3.小程序发布上线的整体步骤
一个小程序的发布上线,一般要经过上传代码 -> 提交审核-> 发布这三个步骤
1.上传代码
-
点击开发者工具顶部工具栏中的“上传” 按钮
-
填写版本号以及项目备注
2.在后台查看上传之后的版本
登录小程序管理后台 -> 管理 -> 版本管理 -> 开发版本,即可查看刚才提交上传的版本了:
3.提交审核
-
为什么需要提交审核:为了保证小程序的质量,以及符合相关的规范,小程序的发布是需要经过腾讯官方审核的
-
提交审核的方式:在开发版本的列表中,点击“提交审核”按钮之后,按照页面提示填写相关的信息,就能把小程序提交到腾讯官方进行审核。
4.发布
审核通过之后,管理员的微信中会收到小程序通过审核的通知,此时在审核版本的列表中,点击“发布”按钮之后,即可把“审核通过”的版本发布为“线上版本”,供所有小程序用户访问和使用
4.基于小程序码进行推广
.5小程序运营数据
-
在“小程序后台”查看
-
登录小程序管理后台
-
点击侧边栏的“统计
-
点击相应的 tab可以看到相关的数据使用“
-
-
小程序数据助手”查看
-
打开微信
-
搜索“小程序数据助手"
-
查看已发布的小程序相关的数据
-