微信小程序基础知识

时间:2023-01-09 21:43:54

一、基本目录结构

微信小程序基础知识

app.js 定义app入口

app.json 定义页面配置

index.js 页面中的事件和监听

index.wxml 定义布局文件

1.app.json配置基本信息

{

“pages”:[ //配置目录信息

“pages/index/index”, //第一条即是程序启动的首页

“pages/logs/logs”

   ],

   “window”:{ //窗口样式

“backgroundTextStyle”:”Light”,

“navigationBackgroundColor:”#fff”,

“navigationBarTitleText”:”WeChat”,
                   “navigationBarTextStyle”:”black”

  },

    "tabBar": {  //底部菜单栏配置

   “color”:”#333”, //字体颜色

  "list": [{

   "pagePath": "pages/index/index",

   “iconPath”:”images/icon.png”,

    "text": "首页"

  }, {

     
"pagePath": "pages/logs/logs",

     
"text": "日志"

     }]

  },

"networkTimeout": {  //网络超时配置

  "request": 10000,

  "downloadFile": 10000

},

  "debug": true

}

2.app.js配置全局方法并调用 //页面加载后自动执行

var
config={

onLaunch:function(){

  var
logs=wx.getStorageSync(‘logs’)||[];

  logs.unshift(Date.now())

   wx.setStorageSync(‘logs’,logs)

  },

getUserInfo:function(cb){

var
that=this;

if(this.globalData.userInfo){

  typeof cb==”function”&&cb(this.globalData.userInfo)

   }else{

wx.login({

success:function(){

wx.getUserInfo({

success:function(res){

           that. globalData.userInfo=res.userInfo

          }

        })

       }

     })

}

},

globaolData:{

userInfo:null

}

}

App(config); //传入config参数

3./pages/index/index.js
配置页面入口

var
app=getApp(); //获取app.js对象

var
pageConfig=({

data:{

motto:”Hello
World”,

userInfo:{}

},

//事件处理函数

bindViewTap:function(){

wx.navigateTo({

url:’../logs/logs’

})

},

onLoad:function(){

var
that=this;

//调用应用实例方法获取全局数据

app.getUserInfo(function(){

//更新数据

that.setData({

userInfo:userInfo

})

  })

},

testClick:function(){  //绑定一个自定义的方法

App. getUserInfo()  //调用App中设置的方法

}

})

Page(pageConfig); //页面初始化

4.
/pages/index/index.json当前页面配置 //只能配置相关window显示,覆盖app.json中的配置

{

“backgroundTextStyle”:”dark”,

“navigationBackgroundColor:”#fff”,

}

5.
/pages/index/index.wxss当前页面css设置 //覆盖app.wxss中的设置

6./pages/index/index.wxml
配置页面逻辑与ui

二、视图与渲染

1.快速配置一个页面

①在pages目录下新建一个文件firstPage,再创建first.js和first.wxml

②在app.json中配置页面信息

“pages”:[ //配置目录信息

“pages/index/index”,

“pages/logs/logs”,

         “pages/first/first”,

]

③在first.js中添加Page(); //页面初始化

④在first.wxml中写入需要显示的信息 //页面初始化

2.小程序的标签

①条件标签wx:if,wx:else

②{{data}}双花括号展示数据  //数据来自Page函数中的data

<view class="container">

<view class="userinfo">

<button wx:if="{{!hasUserInfo && canIUse}}"> 获取头像昵称 </button>

<block wx:else>

<image src="{{userInfo.avatarUrl}}" background-size="cover"></image>

<text class="userinfo-nickname">{{userInfo.nickName}}</text>

</block>

</view>

</view>

③循环标签wx:for

<view wx:for=”{{[‘aaa’,’bbb’,’ccc’]}}”></view>

//第二种写法

<view wx:for=”{{[‘aaa’,’bbb’,’ccc’]}}” wx:for-item=”item” wx:for-index=”ix”>

{{ix}} – {{item}}

</view>

3.使用模板

方法一:

1.在pages/目录下,新建页面,如:/templates/header.wxml

2.在其他任意页面使用<include src=”../templates/header”/>引入该模板

方法二:

1.在pages/目录下,新建页面,如:/templates/header.wxml

2.在该页面中声明几个带有name的版本标签

< template name=”header1”>这是模板1</ template >

< template name=”header2”>这是模板2</ template >

3.在其他任意页面使用:

<import src=”../templates/header” />

< template is=”footer1” />

动态导入数据到模板:

调用模板页:

<import src=”../templates/header” />

< template is=”footer1” data=”{{text:’这是导入的数据信息’}}”/>

模板页:

< template name=”header2”>

{{text}}

</ template >

三、小程序事件

1.bind与catch绑定点击事件,catch会阻止事件冒泡

<view class=”view1” bindtap=”view1click”></view>  //会冒泡

<view class=”view1” catchtap=”view1click”></view>  //不会冒泡

view1函数写在该页面js文件中即:

Page({

view1:function(){

console.log(‘click’);

}

})

2.事件对象

<view class=”view1” bindtap=”view1clickdata-title=”titletest” data-id=”100”></view>

Page({

view1:function(event){

console.log(event);

}

})

currentTarget: 绑定事件的组件

target: 发生事件的组件

事件的数据源传递:

在currentTarget下有dataset

其中dataset为{id:”100”,title:”titletest”}

元素的值如input中的值,在currentTarget下的detail.value之中

四、小程序的生命周期

1.App.js定义的全局生命周期及方法

App({

onLaunch: function(options) {

//小程序加载的时候

},

onLoad:function(options){

//数据加载完成

},

onReady:function(){

//页面渲染完成

},

onShow: function(options) {

// 小程序前台显示的时候调用

},

onHide: function() {

// 小程序进入后台运行的时候调用

},

onUnload: function() {

// 页面被卸载

},

onError: function(msg) {

console.log(msg)

},

userSetF:function(){}, //自定义的全局方法

globalData: {}  //全局数据对象

})

2.写在每个页面的Page中则是当前页面的方法和周期

五、页面之间的跳转路由

1.调用方法跳转

wx.navigateTo({  //当前页面不关闭,打开新页面并跳转

url:”../logs/logs?id=100” //传递参数到新页面

})

wx.redirectTo({  //关闭当前页面,打开新页面并跳转

url:”../logs/logs?id=100” //传递参数到新页面

})

2.标签跳转

<navigator url=” ../logs/logs?id=100” redirect> //设置redirect属性

<text>点击跳转</text>

</ navigator >

3.新页面接收传递过来的参数:

Page({

onLoad:function(options){ //在生命周期函数onLoad中参数会接收url传递过来的数据

console.log(options)

},

})

六、小程序UI组件

1.页面的布局支持两种

flex布局:

相对绝对定位布局:   
使用单位rxp,微信小程序特有的像素单位,会自动适配屏幕

2.页面的基础组件

视图容器组件:view;scrooll-view;swiper

view:基础视图容器,可以理解为div

scroll-view:带滚动条的容器,上下滚动需要设置高度

属性scroll-into-view=”{{intoview}}”
,可以设置intoview为某个id

swiper:轮播图容器

icon组件

text组件

progress进度条组件

表单组件:button checkbox input label picker radio slider switch form

picker:下拉选框

slider:滑块

form:属性form-type

3.操作反馈组件

action-sheet
//
模态底部选择框

<action-sheet hidden=”{{actionSheetHidden}}”
bindchange=”actionSheetChange”>

//通过数据控制是否显示隐藏

<action-sheet-item data-name=”item1”>item1</action-sheet-item>

</action-sheet>

modal
//
模态框

<modal confitm-text=”确认”
cancle-text=”取消” hidden=”{{modalHidden}}” bindConfirm=”modalChange”
bindCancel=”modalCancel”></modal>

toast
//
弹窗提示

<toast hidden=”{{toastHidden}}” duration=”3000”
bindchange=”toastChange”></toast>

loading
//
弹窗提示

<loading hidden=”{{loadingHidden}}”>加载中…</loading>

4.导航跳转组件navigator(类似a标签,微信无a标签)

<navigator url=” ../logs/logs?id=100”
redirect>
//设置redirect属性

<text>点击跳转</text>

</ navigator >

5.多媒体组件

image
video audio

6.地图组件

map

7.画布与游戏组件

canvas

七、小程序API(基础部分API)

1.请求服务器数据

wx.request({

url:””,

data:{},

header:{ //请求头信息

‘Content-Type’:’application/json’

},

success:function(res){},

fail:function(res){}

})

2.图片选择与微信拍照

wx.chooseImage({

count:1, //选择图片张数,最多为9张

sizeType:[‘origina’,’compressed’],//设置是原图还是压缩图片

sourceType:[‘album’,’camera’],//设置来源是相机还是相册

success:function(res){

var tempFilePath=res.tempFilePaths;

//设置全局data的值,改变显示效果

that.setData()

}

})

3.文件上传与下载

上传文件:
wx.chooseImage({

count:1, //选择图片张数,最多为9张

sizeType:[‘origina’,’compressed’],//设置是原图还是压缩图片

sourceType:[‘album’,’camera’],//设置来源是相机还是相册

success:function(res){

var
tempFilePath=res.tempFilePaths;

//设置全局data的值,改变显示效果

wx.uploadFile({  //上传图片

url:’’,

filePath:’ tempFilePath[0]’,

name:’file’,

formData:{

‘user’:’test’

}

})

})

下载文件:

wx.downloadFile({ 
//上传图片

url:’’, //文件下载地址

type:’image’, //获取文件的类型,一共三总:image/audio/video

name:’file’,

success:function(res){

console.log(res.
tempFilePaths)

}

})

4.websocket

//开启链接

wx.connectSocket({

url:’’,

method:’GET’,

success:function(res){

}

})

//发送消息

wx.sendSocketMessage({

data:”你好我是小程序”,

success:function(res){

    },

fail:function(){},

complete:function(){

}

  })

//监听服务器返回消息

wx.onSocketMessage(function(res){

console.log(res)

})

//关闭链接

wx.onSocketClose(function(res){

console.log(res)

})

5.音乐播放和控制

//播放音乐

wx.playBackgroundAudio({

dataUrl:”http://”,

success:function(res){

  },

fail:function(){},

complete:function(){

}

  })

//监听音乐播放

wx.onBackgroundAudio(function(res){})

6.缓存数据(有最大限制,用户退出不会清除)

//添加缓存

wx.setStorageSync(‘’log’,logs) //同步设置

wx.setStorage (‘’log’,logs) //异步设置

//获取缓存

wx.getStorageSync(‘’log’ )

//移除缓存

wx.removeStorage(‘’log’ )

7.位置信息

//获取当前位置

wx.getLocation({

type:’wgs84’, //使用gps类型的坐标

 success:function(res){

var
latitude=res.latitude  //获取坐标的返回值

var
longitude=res.longitude

wx.openLocation({  //打开地图

latitude:
latitude,

longitude:
longitude,

scale:10

       })

wx.chooseLocation({  //用户选择坐标

success:function(res){

//success

        },

fail:function(res){

},

complete:function(res){

},

       })

    }

  })

8.设备相关API

//获取网络信息

wx.getNetworkType({

success:function(res){

console.log(res)//success

},

})

//获取设备信息

wx.getSystemInfo({

success:function(res){

console.log(res)//success

},

       })

//获取重力感应,每秒调用5次

wx.onAccelerometerChange(function(res){})

//获取罗盘信息,每秒调用5次

wx.onCompassChange(function(res){})

//拨打电话,

wx.makePhoneCall({

phoneNumber:’134000000’

})

9.交互API

//弹出提示框

wx.showToast({

title:’成功’,

icon:’success’,

duration:2000

  })

//弹出模态框

wx.showModal({

title:’提示’,

content:’这是一个模态弹窗’,

success:function(res){

if(res.confirm){

  console.log(‘用户点击确定’)

}

},

})

10.导航和导航条API

//设置导航条信息

  wx.setNavigationBarTitle({

title:’这是title’,

success:function(res){

      }

  })

  wx.showNavigationBarLoading()

//导航条跳转设置

  wx.navigateBack(OBJECT)

  wx.navigateTo(OBJECT)

11.动画API

在wxml中的标签添加数据

<image
animation=”{{animationData}}”></image>

page({

data:{

                   animationData:[]

  },

  bindViewTap:function(){

  //第一步创建动画

var
animation=wx.createAnimation({

duration:3000,

timingFunction:’linear’,

delay:0,

transformOrigin:’50%
50% 0’ //初始位置

     })

//第二步设置动画行为

animation.rotate(90).step();

//第三步将设置的动画绑定到需要显示的元素的data上

this.setData({animationData: animation.export()})

  }

})

12.绘图(canvas)

var context=wx.createContext()

context.rect(5,5,25,25)

context.stroke()

context.scale(2,2)

context.stroke()

wx.drawCanvas({

canvasId:’firstCanvas’,

action:context.getActions()

  })