1、小程序的宿主环境
1.1小程序启动过程
1.2页面渲染过程
1.3.小程序API3大分类
2、组件
2.1、 分类
2.2常用的试图容器类组件
swiper组件常用属性:
eg:swiperheswiper-item
wxml文件
<swiper>
<swiper-item class="item">
<view class="A">A</view>
</swiper-item>
<swiper-item class="item">
<view class="B">B</view>
</swiper-item>
<swiper-item class="item">
<view class="C">C</view>
</swiper-item>
</swiper>
wxss文件
.item{
height: 100%;
line-height: 150px;
text-align: center;
}
.item .A{
background-color: red;
}
.item .B{
background-color: skyblue;
}
.item .C{
background-color: yellow;
}
2.3常用的基础内容组件
eg:
<text selectable="">121221</text>
<rich-text nodes="<h1 style='color:red'>11</h1>"></rich-text>
2.4其他常用组件
2.4.1 button组件
<button type="primary">按钮</button>
<!-- 小尺寸 -->
<button type="warn" size="mini">警告</button>
<!-- 镂空按钮 -->
<button type="primary" plain>镂空</button>
2.4.2 image组件属性
<image src="../../img/ad-l.png" mode="aspectFill"></image>
3、WXML模板语法
3.1数据绑定
3.1.1内容绑定
wxml:
<view> {{hello}}</view>
js:
page里的data:
data: {
hello:'hello word'
},
3.1.2属性绑定
wxml:
<image src="{{img}}"></image>
js:
page里的data:
data: {
img:'../../img/bg2.png'
},
3.1.2 三元运算
wxml:
<view>{{Numbers>=5 ? '大于5':'小于5'}}</view>
js:
page里的data:
data:{
Numbers:Math.random()*10
}
3.2事件绑定
3.2.1常用事件
3.2.2事件对象的属性列表
3.2.3 target和currentTarget的区别
3.2.4 bindtap
eg:
<button type="primary" bindtap="btnTap">按钮</button>
js:
Page({
btnTap(e){
console.log(e)
},})
3.2.5 事件传参与数据同步
eg:
<button type="primary" bindtap="btnTap">加一 {{count}}</button>
js:
page({
data: {
hello:'hello word',
img:'../../img/bg2.png',
Numbers:Math.random()*10,
count:0,
},
btnTap(e){
this.setData({
count:this.data.count+1
})
},
)}
3.2.6事件传参
3.2.7 bindinput语法格式
每次输入一个数字都更新输出数据
eg:
<input bindinput="inputHandler" style="border:1px solid red" ></input>
js:
page({
inputHandler(e){
console.log(e.detail.value)
},})
文本框和data之间的数据同步
eg:
wxml:
<input value="{{msg}}" bindinput="inputHandler" ></input>
js:
Page({
data:{
msg:'你好',
}
inputHandler(e){
this.setData({
msg:e.detail.value
})
},
})
3.2.7条件渲染
eg:
wxml:
<view wx:if="{{page===1}}">男</view>
<view wx:elif='{{page===2}}'>女</view>
<view wx:else>保密</view>
js:
page({
data:{
page:0
}
})
结合使用wx:if
eg:
不显示多余的标签----block不显示
<block wx:if="{true}">
<view>1</view>
<view>2</view>
</block>
显示隐藏
3.2.8列表渲染
4.WXSS模板样式
4.1rpx
4.2样式导入
4.3全局配置
4.3.1window
4.3.2tabBar
4.4页面配置
eg:
5.网络数据请求
5.1get请求
wxml:
<button bindtap="getinfo">get请求</button>
js:
Page:({
getinfo(){
wx.request({
url: 'https://www.escook.cn/api/get',
method:'get',
data:{
name:'zs',
age:20
},
success:(res)=>{
console.log(res.data)
}
})
},})
5.2发起post请求
eg:
<button bindtap="postinfo">post请求</button>
js:
page:({
postinfo(){
wx.request({
url: 'https://www.escook.cn/api/post',
method:'post',
data:{
name:"zs",
age:23
},
success:(res)=>{
console.log(res.data)
}
})
},})
5.3 页面加载时请求数据
生命周期中发起监听页面函数
5.4跳过request合法域名效验
5.5 跨域和axios的说明
6.视图与逻辑
6.1页面导航
6.1.1 声明式导航
6.1.2 编程式导航
eg:
<button type="primary" bindtap="news">跳转消息</button>
js:
news(){
wx.switchTab({
url: '/pages/news/news',
})
},
eg:
wxml:
<button type="primary" bindtap="info">跳转info</button>
js:
info(){
wx.navigateTo({
url: '/pages/info/info',
})
},
eg:
<button type="primary" bindtap="tohome">上一层</button>
js:
tohome(){
wx.navigateBack({
})
},
6.1.3 导航传参
6.2 页面事件
6.2.1 下拉刷新
6.2.2 上拉触底
6.3 生命周期
6.3.1 应用生命周期函数
6.3.2 页面生命周期
6.4WXS脚本
eg:
<view>{{m1.toUpper(cont)}}</view>
<wxs module="m1">
module.exports.toUpper= function(str){
return str.toUpperCase()
}
</wxs>
js:
data: {
cont:'zs',
},
7.基础加强
7.1自定义组件
7.1.1 自定义组件-数据,方法,属性
data和methods使用和vue一样
properties属性 和vue中自定义属性一模一样
7.1.2数据监听器
7.1.3 纯数据字段
7.1.4 组件生命周期
7.1.5组件所在页面的生命周期
7.1.6 插槽
7.1.7父子组件之间的通信
属性绑定
事件绑定
eg:
获取组件实例
behaviors
7.2使用npm包
7.3全局数据共享
eg1:在store中创创建实例
// 在这个 JS 文件中,专门来创建 Store 的实例对象
定义数据,计算属性,通过action修改store里的值
import { observable, action } from 'mobx-miniprogram'
export const store = observable({
// 数据字段
numA: 1,
numB: 2,
activeTabBarIndex: 0,
// 计算属性
get sum() {
return this.numA + this.numB
},
// actions 函数,专门来修改 store 中数据的值
updateNum1: action(function (step) {
this.numA += step
}),
updateNum2: action(function (step) {
this.numB += step
}),
updateActiveTabBarIndex: action(function(index) {
this.activeTabBarIndex = index
})
})
eg2:将Store中的成员绑定到页面中
<view>{{numA}} + {{numB}} = {{sum}}</view>
<van-button type="primary" bindtap="btnHandler1" data-step="{{1}}">numA + 1</van-button>
<van-button type="danger" bindtap="btnHandler1" data-step="{{-1}}">numA - 1</van-button>
在页面的js文件引入
import { createStoreBindings } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'
Page({
/**
* 生命周期函数--监听页面加载
*/
onLoad: function (options) {
this.storeBindings = createStoreBindings(this, {
store,
fields: ['numA', 'numB', 'sum'],
actions: ['updateNum1']
})
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload: function () {
this.storeBindings.detroyStoreBindings()
},
})
在页面上使用store成员
绑定触发函数
btnHandler1(e) {
调用e.target.dataset方法
this.updateNum1(e.target.dataset.step)
},
eg3:将store中的成员绑定到组件中
代码:
wxml:
<!--components/numbers/numbers.wxml-->
<view>{{numA}} + {{numB}} = {{sum}}</view>
<van-button type="primary" bindtap="btnHandler2" data-step="{{1}}">numB + 1</van-button>
<van-button type="danger" bindtap="btnHandler2" data-step="{{-1}}">numB - 1</van-button>
js:
// components/numbers/numbers.js
import { storeBindingsBehavior } from 'mobx-miniprogram-bindings'
import { store } from '../../store/store'
Component({
behaviors: [storeBindingsBehavior],
storeBindings: {
// 数据源
store,
fields: {
numA: 'numA',
numB: 'numB',
sum: 'sum'
},
actions: {
updateNum2: 'updateNum2'
}
},
/**
* 组件的属性列表
*/
properties: {
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
btnHandler2(e) {
this.updateNum2(e.target.dataset.step)
}
}
})
7.4分包
7.4.1配置方法
7.4.2独立分包
eg:在分包时候添加independent后就是独立分包