1.小程序官方api文档
1.1showToast提示框
clickBtn(){
wx.showToast({
title:"加载中...",
icon:"success",
duration:1500,
mask:true,
success:res=>{
console.log(res);
}
})
}
<button type="primary" bindtap="clickBtn">按钮</button>
<input type="text" style="padding:20rpx;background:#eee;"> </input>
1.2 showModel和showLoading界面交互的操作
onLoad(options) {
wx.showLoading({
title:'加载中...',
mask:true/*将输入框遮蔽 */
})
setTimeout(()=>{
wx.hideLoading()
},2000)
},
clickBtn(){
wx.showModal({
title:'请输入验证码',
// content:'删除之后不可恢复,请谨慎',
// showCancel:false,
// cancelColor:"#c00",
editable:true,
placeholderText:"请输入...",
// success:res=>
/*使用箭头不会出现指向问题 */
success(res){
if(res.confirm)
{
console.log(res);
}
else if (res.cancel){
console.log('用户点击取消');
}
}
})
},
data: {
listArr:['A','B','C']
},
clickBtn(){
wx.showActionSheet({
itemList: this.data.listArr,
success:(res)=>{
console.log(this.data.listArr[res.tapIndex])
},
fail:(res)=> {
console.log(res.errMsg)
}
})
},
案例融合wx.showModal,下面放出修改的部分逻辑代码
onSubmit(){
let value =this.data.iptValue
// console.log(this.data.iptValue);
let arr = this.data.listArr;
arr.push({
/*使用时间戳 */
id:Date.now(),
title:value
})
this.setData({
listArr:arr,
iptValue:""
/*最后将输入的内容进行清空 */
})
wx.showToast({
title:"发布成功",
icon:'none'
})
},
clickClose(event){
wx.showModal({
title: '是否确认删除',
success: (res) => {
if(res.confirm){
let {index}= event.currentTarget.dataset;
let arr =this.data.listArr;
arr.splice(index,1);
/*进行元素移除 */
// console.log(arr);
this.setData({
listArr:arr
})
/*使用return可以将下面代码进行注释 */
}
}
})
},
2.常见的导航栏api接口
onLoad(options) {
wx.setNavigationBarTitle({
title: 'onload中修改的标题',
})
wx.setNavigationBarColor({
frontColor:"#000000",
backgroundColor:"#eee"
})
wx.hideNavigationBarLoading()
setTimeout(()=>{
wx.hideNavigationBarLoading()
},2000)
wx.hideHomeButton();
},
{
"usingComponents": {},
"navigationBarTitleText": "api学习"
}
3.全局与页面配置中关于window窗口UI设置
全局配置这里推荐直接看文档小程序配置 / 全局配置 (qq.com),下面列出几个易出错的函数
"backgroundColor": "#F6F6F6",
"enablePullDownRefresh":true,
4.tabBar底部tab栏的配置用法
这一节主要是设置底部的tab栏,具体源码如下
"tabBar": {
"color":"#8a8a8a",
"backgroundColor": "#efefef",
"borderStyle":"white",
"list": [
{
"pagePath": "pages/index/index",
"text": "首页",
"iconPath": "./static/images/homepage.png",
"selectedIconPath": "./static/images/homepage.png"
},
{
"pagePath": "pages/data/data",
"text": "文章",
"iconPath": "./static/images/title.png",
"selectedIconPath": "./static/images/title.png"
},
{
"pagePath": "pages/demo/demo",
"text": "我的",
"iconPath": "./static/images/my.png",
"selectedIconPath": "./static/images/my.png"
}
]
},
5.api中navigate路由接口与组件的关系
点击进行页面跳转——导航 / navigator (qq.com)
<navigator url="../demo/demo" open-type="reLaunch"> go demo page</navigator>
其中 open-type="reLaunch"可以携带参数
url="../demo/demo?id=123"
最后在页面中显示出来的是这样的
open-type="switchTab"可以进行跳转,但是不能携带参数
参考资料:api路由 / wx.reLaunch (qq.com)
初始页面(非跳转页面)
<view
bindtap="goDemo"
style="width:100rpx;height:100rpx; background:#EEE8AA;">
<view>
<text></text>
</view>
<view>
</view>
</view
goDemo(){
// wx.reLaunch({
// url: '../demo/demo',
// })
wx.navigateTo({
url: '../api/api',
})
/*有返回就箭头*/
},
跳转页面
onLoad(options) {
setTimeout(()=>{
wx.navigateBack()
},2000)
/*2s后自动调回(可添加如果失败自动跳转回去)*/
}
6.【小案例】初识wx.request获取网络请求并渲染至页面
Page({
/**
* 页面的初始数据
*/
data: {
listArr:[
]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.getData();
},
getData(){
wx.request({
url:'https://api.thecatapi.com/v1/images/search?limit=2',
success:res=>{
console.log(res.data);
this.setData({
listArr:res.data
})
}
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})
<view class="out">
<view class="box" wx:for="{{listArr}}" wx:key="id">
<view class="pic">
<image src="{{item.url}}" mode="aspectFill" ></image>
</view>
<view class="name">
姓名:{{item.id}}
</view>
</view>
</view>
.out{
padding:30rpx;
}
.out .box{
width:100%;
height:460rpx;
border:1px solid red;
margin-bottom:30rpx;
}
.out .box .pic{
width:100%;
height:400rpx;
}
.out .box .pic image{
width:100%;
height:100%
}
.out .box .name{
text-align:center;
line-height: 80rpx;
}
7.【小案例】开启下拉刷新页面enablePullDownRefresh
实现功能:下拉的时候刷新图片
data: {
listArr:[
]
},
onLoad(options) {
this.getData();
},
/*随机获取getData的网络请求 */
getData(){
wx.showLoading({
title: '加载中...',
mask:true
})
wx.request({
url:'https://api.thecatapi.com/v1/images/search?limit=2',
success:res=>{
console.log(res.data);
this.setData({
listArr:res.data
})
/*结束刷新直接使用这个 */
wx.stopPullDownRefresh()
// setTimeout(()=>{
// wx.hideLoading()
// },2000)
},
/*无论成功/失败都会刷新 */
complete:err=>{
wx.hideLoading()
}
})
},
onPullDownRefresh() {
/*先把数组进行清空,然后再重新进行刷新 */
this.setData({
listArr:[]
})
// console.log(123);
this.getData();
},
{
"usingComponents": {},
"enablePullDownRefresh":true,
"backgroundColor":"#00B26A",
"backgroundTextStyle":"light"
}
8.【小案例】触底加载更多数据onReachBottom
"onReachBottomDistance": 200
/*随机获取getData的网络请求 */
getData(){
wx.request({
url:'https://api.thecatapi.com/v1/images/search?limit=2',
success:res=>{
console.log(res.data);
let oldData = this.data.listArr;
let newData = oldData.concat(res.data)
/*将数据进行拼接 */
this.setData({
listArr:newData
})
/*结束刷新直接使用这个 */
wx.stopPullDownRefresh()
// setTimeout(()=>{
// wx.hideLoading()
// },2000)
},
/*无论成功/失败都会刷新 */
complete:err=>{
wx.hideLoading()
wx.hideNavigationBarLoading()
}
})
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
/*下拉刷新 */
onPullDownRefresh() {
/*先把数组进行清空,然后再重新进行刷新 */
this.setData({
listArr:[]
})
// console.log(123);
this.getData();
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
wx.showNavigationBarLoading()
this.getData();
},
9.wx.request的其他参数
// pages/api3/api3.js
Page({
/**
* 页面的初始数据
*/
data: {
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.getData();
},
getData(){
wx.request({
url:'http://jsonplaceholder.typicode.com/posts',
method:"post",
header:{"content-type":"application/json","token":123123123123},
data:{
name:"我是云开发",
age:18
},
success:res=>{
console.log(res);
}
})
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})
10.【小案例】网络请求及表单采集综合练习
Page({
/**
* 页面的初始数据
*/
data: {
iptVal:"",
listArr:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.getData()
},
getData(){
wx.request({
url:'https://tea.qingnian8.com/demoArt/get',
method:'post',
header:{"Content-Type":"application/json"},
data:{
num:3,
page:1
},
success:res=>{
console.log(res);
this.setData({
listArr:res.data.data
})
}
})
},
onSubmit(){
console.log(this.data.iptVal);
},
/**
* 生命周期函数--监听页面初次渲染完成
*/
onReady() {
},
/**
* 生命周期函数--监听页面显示
*/
onShow() {
},
/**
* 生命周期函数--监听页面隐藏
*/
onHide() {
},
/**
* 生命周期函数--监听页面卸载
*/
onUnload() {
},
/**
* 页面相关事件处理函数--监听用户下拉动作
*/
onPullDownRefresh() {
},
/**
* 页面上拉触底事件的处理函数
*/
onReachBottom() {
},
/**
* 用户点击右上角分享
*/
onShareAppMessage() {
}
})
<view class="out">
<view class="form">
<input model:value="{{iptVal}}" class="text" placeholder="请输入标题" bindconfirm="onSubmit"></input>
</view>
<view class="row" wx:for="{{listArr}}" wx:key="_id" >
<view class="username">
标题:{{item.title}}
</view>
<view class="time">时间:{{item.posttime}}</view>
</view>
</view>
.out{
padding:30rpx;
}
.out .row{
padding:15rpx;
border-bottom:1px solid #ccc;
}
11.【小案例】页面交互增加友好体验
/**
* 页面的初始数据
*/
data: {
iptVal:"",
listArr:[]
},
/**
* 生命周期函数--监听页面加载
*/
onLoad(options) {
this.getData()
},
getData(){
wx.request({
url:'https://tea.qingnian8.com/demoArt/get',
method:'post',
header:{"Content-Type":"application/json"},
data:{
num:3,
page:1
},
success:res=>{
console.log(res);
this.setData({
listArr:res.data.data
})
}
})
},
onSubmit(){
console.log(this.data.iptVal);
wx.request({
url:'https://tea.qingnian8.com/demoArt/add',
method:"post",
header:{"Content-Type":"application/json"},
data:{
title:this.data.iptVal
},
success:res=>{
console.log(res);
if(res.data.errCode!=0){
return;
}
this.setData({
iptVal:""
})
this.getData();
wx.showToast({
title:res.data.errMsg
})
}
})
},
<view class="out">
<view class="form">
<input model:value="{{iptVal}}" class="text" placeholder="请输入标题" bindconfirm="onSubmit"
style="padding:20rpx;background:#eee;margin-bottom:20rpx;"
></input>
</view>
<view class="row" wx:for="{{listArr}}" wx:key="_id" >
<view class="username">
标题:{{item.title}}
</view>
<view class="time">时间:{{item.posttime}}</view>
</view>
</view>
.out{
padding:30rpx;
}
.out .row{
padding:15rpx;
border-bottom:1px solid #ccc;
}
12.自定义组件Component的用法
12.1 component 用法
12.1.1步骤
- 学习本组件的用法之前,首先要在component右击,新建文件夹(命名之后),再次右击component,新建component,之后会自动生成4个文件(.js/.json/.wxml/.wxss),如下图所示
2.配置相关组件位置 在app.json中进行全局配置(所有文件都适用)
在其他文件夹中,则在.wxml文件中可以添加组件进行单独配置 如:
<MyHeader ></MyHeader>
3.组件内容单独配置
<view class="header">
<view class="big">
头部大标题
</view>
<view class="small">
咸虾米的小程序开发
</view>
</view>
.header{
text-align:center;
padding:30rpx;
background:#eee;
}
.header .big{
font-size:50rpx;
}
.header .small{
font-size:38rpx;
margin-top:20rpx;
color:#666;
}
<view class="footer">
<view class="title">底部信息</view>
<view class="small">版权信息{{name}}</view>
</view>
<!--组件创建-->
.footer{
background: #424242;
color:#fff;
padding:50rpx;
text-align:center;
}
.footer .title{
font-size:52rpx;
}
.footer.small{
font-size:32rpx;
}
同时可以通过.js 文件里的data进行信息补充
Component({
/**
* 组件的属性列表
*/
properties: {
name:{
type:String,
value:"------"
}
},
/**
* 组件的初始数据
*/
data: {
},
/**
* 组件的方法列表
*/
methods: {
}
})
通过各文件夹.wxml文件配置组件,可以对component组件中的value进行覆盖
<!--将原本组件中的值进行覆盖-->
<MyFooter name="-我的"></MyFooter>