全局配置文件
pages
window
tabBar
- 底部导航条
selectedColor tab 上的文字选中时的颜色,仅支持十六进制颜色
"tabBar": {
"selectedColor": "#269fde",
"list": [{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "/images/home.png",
"selectedIconPath": "/images/home-o.png"
}, {
"pagePath": "pages/my/my",
"text": "我的",
"iconPath": "/images/my.png",
"selectedIconPath": "/images/my-o.png"
}]
}
wxml
-
view 相当于 div -
image 相当于 img -
input 输入框 没有样式时看不到的 -
button 按钮 -
text 相当于 span
wxss
flex布局
- 改变主轴方向:text-direction
- 换行: flex-wrap: wrap
- 主轴对齐方式
- justify-content
- felx-start flex-end space-between space-around
- 侧轴对齐方式
事件
获取输入框中的内容
- 通过bindinput获取输入框中的内容(内容只要改变就会触发)
- 通过bindchange获取输入框中的内容(内容改变且光标离开触发)
- 通过接收event,
e.detail.value
数据绑定
- 在js的data中定义初始数据,然后通过 {{}} 渲染到wxml中
单向数据绑定
- 不应该用this.旧值 = 新值
- 应该用 this.setDate({ 变量名:新值 })
turn() {
this.setData({
pindao: '少儿频道'
})
}
双向数据绑定
- 一般用于表单类的
- 首先通过
bindinput 获取到输入框中的值 - 然后通过 setData({ 旧值:e.detail.value }) 把旧值渲染成新值
wxml
<view>{{danmu}}</view>
<input bindinput="get" class="danmu" type="text" placeholder="请出入内容"/>
js
get(e) {
console.log(e.detail.value);
this.setData({
danmu: e.detail.value
})
}
常用API
弹窗
submit() {
wx.showToast({
title: '提交失败',
icon: 'error',
duration: 3000
})
}
页面跳转
- wx.navigateTo() 不能跳转tabBar (底部导航),保留当前页面
wxml
<button bindtap="toaaa" class="btn">toaaa</button>
js
toaaa() {
wx.navigateTo({
url: '/pages/aaa/aaa',
})
}
- wx.redirectTo() 不保留当前页面。与 wx.navigateTo 的区别是: redirectTo返回会跳转到上上页(因为不保留当前页)
wxml
<button bindtap="toBBB">tobbb</button>
js
toBBB() {
wx.redirectTo({
url: '/pages/bbb/bbb',
})
}
- wx.switchTab() 只能跳转tabBar
wxml
<button bindtap="todata">todata</button>
js
todata() {
wx.switchTab({
url: '/pages/data/data',
})
}
wxml
<button bindtap="reback">返回到上一个页面上</button>
js
reback() {
wx.navigateBack({
delta: 1
})
}
- wx.reLaunch() 关闭所有页面,打开到应用内的某个页面
wxml
<button bindtap="openPage">关闭所有页面,打开到应用内的某个页面</button>
js
openPage() {
wx.reLaunch({
url: '/pages/data/data',
})
}
let that = this
wx.request({
url: 'https://cnodejs.org/api/v1/topics',
success(res) {
that.setData({
dataList: res.data.data
})
}
})
获取微信授权用户信息
- wx.getUserProfile
- res.userInfo.nickName 获取用户名
- res.userInfo.avatarUrl 获取用户头像地址
wxml
<button bindtap="getUserInfo">获取用户信息</button>
js
getUserInfo() {
wx.getUserProfile({
desc: '用于完善个人信息',
success(res) {
console.log(res);
console.log(res.userInfo.nickName);
console.log(res.userInfo.avatarUrl);
}
})
}
- TypeError: Cannot read property ‘setData’ of undefined 经典报错,this指向有问题
getUserInfo() {
let that = this
wx.getUserProfile({
desc: '用于完善个人信息',
success(res) {
console.log(res);
console.log(res.userInfo.nickName);
console.log(res.userInfo.avatarUrl);
that.setData({
userName: res.userInfo.nickName,
avatarUrl: res.userInfo.avatarUrl
})
}
})
}
全局globalData数据
const app = getApp()
设置用户数据为全局数据
- 首先要先缓存到globalData中
getUserInfo() {
let that = this
wx.getUserProfile({
desc: '用于完善个人信息',
success(res) {
console.log(res);
console.log(res.userInfo.nickName);
console.log(res.userInfo.avatarUrl);
that.setData({
userName: res.userInfo.nickName,
avatarUrl: res.userInfo.avatarUrl
})
app.globalData.userInfo = res.userInfo
}
})
}
- 下面的页面就可以进行使用啦
clickItem() {
console.log('被点击了');
console.log(app.globalData.userInfo);
}
本地存储
设置
- wx.setStorageSync(‘key’,value)
获取
授权获取
getUserInfo() {
let that = this
wx.getUserProfile({
desc: '完善信息',
success(res) {
console.log(res.userInfo.nickName);
console.log(res.userInfo.avatarUrl);
that.setData({
nickName: res.userInfo.nickName,
avatarUrl: res.userInfo.avatarUrl
})
app.globalData.userInfo = res.userInfo
wx.setStorageSync('userInfo', res.userInfo)
}
})
}
其他页面使用
show() {
wx.getStorageSync('userInfo')
app.globalData.userInfo = wx.getStorageSync('userInfo')
this.setData({
userInfo: app.globalData.userInfo
})
}
生命周期
- 分两大类,一类是页面生命周期,另一类是应用生命周期
页面声明周期
Page({
data: {
},
onLoad(options) {
console.log('onLoad声明周期,只会执行一次,一般做初始请求用',options)
},
onReady() {
console.log('onReady声明周期,多做修改内容使用')
},
onShow() {
console.log('onShow显示一次,加载一次,多做数据更新用')
},
onHide() {
console.log('onHide隐藏一次,加载一次');
},
onUnload() {
console.log('onUnload小程序关闭时触发');
},
onPullDownRefresh() {
},
onReachBottom() {
},
onShareAppMessage() {
}
})
应用生命周期
- 就是值整个微信小程序应用,都写到app.js中
- onLaunch 小程序初始化完成时触发,全局只会触发一次
- onShow(小程序启动,或从后台进入前台显示时触发)
- onHide(小程序从前台进入后台时触发)
App({
onLaunch() {
console.log('onLaunch 小程序初始化完成时触发,全局只会触发一次,一般获取用户信息用')
},
onShow() {
console.log('onShow 小程序启动,或从后台进入前台显示时触发')
},
onHide() {
console.log('onHide 小程序从前台进入后台时触发')
},
globalData: {
userInfo: null
}
})
数据类型
- number、string、boolean、null、undefined、Object ( Function、Array、Date . . . )
简单数据类型 | 描述 |
---|
number | 数字型,包含整数和小数,如 18,18.8 | string | 字符串型,如“华神”。注意js里字符串都要带引号 | boolean | 布尔值类型,就true和false两个值,代表真和假 | undefined | Undefined 这个值表示变量不含有值,如var a;声明了变量a,但是没有赋值,就是undefined | null | 空值,如var a=null,声明了变量a为空值 | object | 对象类型: Function、Array、Date . . . |
数据类型转换
方式 | 说明 | 案例 |
---|
toString() | 转为字符串 | var age=1 age.toString() | String() | 转为字符串 | var age=1 String(age) | 用加号拼接字符串 | 转为字符串 | var age=1 “”+age |
方式 | 说明 | 案例 |
---|
Number() | 将字符串转换为数字 | Number(“8.88”) // 返回 8.88 | parseFloat() | 解析一个字符串并返回一个浮点数 | parseFloat(“8.88”) //返回8.88 | parseInt() | 解析一个字符串并返回一个整数 | parseInt(“8.88”) //返回8.88 |
转为数字的几个特殊情况
console.log(Number(""))
console.log(Number(true))
console.log(Number(false))
console.log(Number("华神"))
数组
-
let arr = […] -
let arr = new Array()
- 如果只一个参数,就是长度多少
- 如果2个或2个以上,就是数组元素
-
数组里面可以包含不同变量
添加元素
- 尾部添加 push,返回新数组的长度
- 头部添加 unshift,返回新数组的长度
删除元素
car.splice(0,2,'红旗','特斯拉')
console.log(car)
合并数组
- concat 合并多个数组 多用于下拉加载(拼接)
console.log(car.concat(home))
列表渲染
- wx: for
- block标签一般用来循环或者判断(相当于template标签)
渲染数组
<view wx:for="{{carList}}" wx:key="index">
{{index + 1}} -- {{item}}
</view>
<block wx:for="{{carList}}" wx:key="index">
<view>{{index + 1}} -- {{item}}</view>
</block>
渲染对象
<block wx:for="{{userList}}" wx:key="index">
<view>{{item.name}}</view>
<view>{{item.age}}</view>
<view>{{item.sex}}</view>
</block>
<block wx:for="{{userList}}" wx:key="index">
<view>{{item.name}} || {{item.age}} || {{item.sex}}</view>
</block>
条件渲染
- wx: if 可以结合vx:elif 和 wx:else
<view wx:if="{{false}}">是否显示呢</view>
<view wx:if="{{flag}}">是否显示呢</view>
<view wx:if="{{!flag}}">是否显示呢</view>
<view wx:if="{{num == 1}}">1</view>
<view wx:elif="{{num == 2}}">2</view>
<view wx:else>3</view>
Math
随机数
-
Math.random() [0,1) -
生成 min - max 之间的随机小数
let min = 10
let max = 100
console.log(Math.random() * (max - min ) + min)
let min = 10
let max = 100
console.log(Math.floor(Math.random() * (max - min ) + min))
- 得到两数之间的随机整数(大于等于min,小于max)
function getRandomInt(min, max) {
min = Math.ceil(min)
max = Math.floor(max)
return Math.floor(Math.random() * (max - min)) + min;
}
- 得到两数之间的随机整数(大于等于min,小于等于max)
function getRandomInt(min, max) {
min = Math.ceil(min)
max = Math.floor(max)
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Date
let date = new Date()
console.log(date)
- require(‘…’) 导入(common.js规范)
let utils = require('../../utils/util.js')
let utils = require('../../utils/util.js')
let nowTime = utils.formatTime(time)
console.log(nowTime)
this.setData({
nowTime
})
let utils = require('../../utils/util.js')
let date = new Date('2022-2-25 12:00:00')
console.log(date)
let time = new Date(1645796691081)
console.log(utils.formatTime(time))
let time = new Date()
console.log(time.getTime())
let date = +new Date()
console.log(date)
let d = Date.now()
console.log(d)
方法 | 描述 |
---|
getFullYear() | 获取四位的年(yyyy) | getMonth() | 获取月(0-11) 记得+1 | getDate() | 以数值返回天(1-31) | getHours() | 获取小时(0-23) | getMinutes() | 获取分(0-59) | getSeconds() | 获取秒(0-59) | getDay() | 以数值获取周名(0-6) | getMilliseconds() | 获取毫秒(0-999) | getTime() | 获取时间戳(从 1970 年 1 月 1 日至今) |
this
- 第一层函数里面,this指向 page 实例化
- this.setDate 设置的变量,直接保存到page实例化中了,可以直接在wxml中渲染使用
onLoad() {
console.log(this)
this.setDate({
cat: '花花'
})
}
- 内层的函数,指向内层函数本身。如果需要用到this,则需要转存this
let that = this
wx.request({
url: 'https://www.baidu.com',
success(res) {
console.log(res);
let aaa = 3
that.setData({
dataVal: aaa
})
}
})
回调函数
箭头函数
wx.request({
url: 'https://www.baidu.com',
success:(res)=> {
console.log(res);
let aaa = 3
this.setData({
dataVal: aaa
})
}
})
Promise风格
- 只能用于云开发
- wx.clode.database().collection(‘数据库表名称’).get() 获取数据库表并发出请求
wx.cloud.database().collection('数据库表名称').get()
.then(res=>{
this.setData({
})
this.coding()
})
应用场景
- 当需要多次顺序执行异步操作的时候
- eg:如果想通过异步方法先后检测用户名和密码,需要先异步检测用户名,然后再异步检测密码的情况。就很适合Promise
navigator
<navigator url="/pages/page01/page01">page01</navigator>
- 相当于 a链接 标签跳转+携带参数 这个与编程式导航最大的差别在于可以传递参数
-
- 传递参数 : 在hash地址后面 ?参数名={{ 对象名.xxx }}
<navigator class="aa" url="/pages/page01/page01?id={{zs.id}}&name={{zs.name}}">{{zs.name}}</navigator>
-
-
- 接收参数 接收的是一个参数的大对象 只能在onLoad中接收
onLoad: function (options) {
console.log(options);
}
Api跳转携带参数
跳转方式 | 说明 | 对应wx方法 |
---|
navigate | 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面 | wx.navigateTo | redirect | 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面 | wx.redirectTo | switchTab | 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 | wx.switchTab | reLaunch | 关闭所有页面,打开到应用内的某个页面 | wx.reLaunch | navigateBack | 关闭当前页面,返回上一页面或多级页面 | wx.navigateBack | exit | 退出小程序,target="miniProgram"时生效 | 无 |
toPage02() {
wx.navigateTo({
url: '/pages/page02/page02?id=' + this.data.zs.id + '&name=' + this.data.zs.name,
})
}
onLoad: function (options) {
console.log(options);
console.log(options.id);
console.log(options.name);
},
|