?
全棧開(kāi)發(fā)工程師微信小程序-中(中)
開(kāi)放能力
open-data
用于展示微信開(kāi)放的數(shù)據(jù)
type 開(kāi)放數(shù)據(jù)類(lèi)型
open-gid 當(dāng) type="groupName" 時(shí)生效, 群id
lang 當(dāng) type="user*" 時(shí)生效,以哪種語(yǔ)言展示 userInfo
?
圖片說(shuō)明
?
<open-data type="groupName" open-gid="xxxxxx"></open-data>
<open-data type="userAvatarUrl"></open-data>
<open-data type="userGender" lang="zh_CN"></open-data>
?
web-view
web-view
?組件是一個(gè)可以用來(lái)承載網(wǎng)頁(yè)的容器.
src webview 指向網(wǎng)頁(yè)的鏈接
圖片說(shuō)明
?
案例:
<web-view src="https://mp.weixin.qq.com/"></web-view>
圖片說(shuō)明
?
<script
type="text/javascript"
src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"
></script>
?
onShareAppMessage
案例:
Page({
onShareAppMessage(options) {
console.log(options.webViewUrl)
}
})
?
圖片說(shuō)明
?
ad
廣告
目前暫時(shí)以邀請(qǐng)制開(kāi)放申請(qǐng),請(qǐng)留意后續(xù)模板消息的通知
official-account
用戶(hù)掃碼打開(kāi)小程序,在小程序內(nèi)配置公眾號(hào)關(guān)注組件,快捷關(guān)注公眾號(hào).
使用前要前往小程序后臺(tái),在“設(shè)置”->“接口設(shè)置”->“公眾號(hào)關(guān)注組件”中設(shè)置.
示例代碼:
<official-account></official-account>
原生組件
camera
canvas
input
live-player
live-pusher
map
textarea
video
// cover-view 與 cover-image
?
添加了無(wú)障礙訪問(wèn)
圖片說(shuō)明
?
// 無(wú)障礙的屬性
button
input
textarea
checkbox
switch
radio
slider
picker-view
scroll-view
progress
navigator
image
icon
view
cover-view
cover-image
map
?
javascript
語(yǔ)言
var arr = "dashucoding";
var arr = 10;
var arr = true;
var arr = [2,"dashu",23];
var arr = {name:"dashu"};
var name = "dashu";
if(name === "dashu"){
this.alert("dashucoding");
}else{
this.alert("dashu");
}
// this代表當(dāng)前的頁(yè)面對(duì)象
?
事件
事件是視圖層到邏輯層的通信方式.事件分冒泡事件和非冒泡事件,冒泡事件是當(dāng)一個(gè)組件上的事件被觸發(fā)后,會(huì)向父節(jié)點(diǎn)傳遞,非冒泡事件是不會(huì)向父節(jié)點(diǎn)傳遞的.
<view id="tapTest" data-hi="WeChat" bindtap="tapName">Click me!</view>
target是觸發(fā)事件的源組件
currentTarget是事件綁定的當(dāng)前組件
bindtap, catchtouchstart
bind事件綁定不會(huì)阻止冒泡事件 向上冒泡
catch事件綁定可以阻止冒泡事件冒泡事件 向上冒泡
// 事件對(duì)象可以攜帶額外信息,如 id, dataset, touches
Page({
tapName(event) {
console.log(event)
}
})
changedTouches
detail 自定義事件所攜帶的數(shù)據(jù)
?
touchstart 手指觸摸動(dòng)作開(kāi)始
touchmove 手指觸摸后移動(dòng)
touchcancel 手指觸摸動(dòng)作被打斷
touchend 手指觸摸動(dòng)作結(jié)束
tap 手指觸摸后馬上離開(kāi)
?
圖片說(shuō)明
?
<view id="outer" bindtap="handleTap1">
outer view
<view id="middle" catchtap="handleTap2">
middle view
<view id="inner" bindtap="handleTap3">inner view</view>
</view>
</view>
?
圖片說(shuō)明
?
<view
id="outer"
bind:touchstart="handleTap1"
capture-bind:touchstart="handleTap2"
>
outer view
<view
id="inner"
bind:touchstart="handleTap3"
capture-bind:touchstart="handleTap4"
>
inner view
</view>
</view>
?
圖片說(shuō)明
?
<view data-alpha-beta="1" data-alphaBeta="2" bindtap="bindViewTap">
DataSet Test
</view>
Page({
bindViewTap(event) {
event.currentTarget.dataset.alphaBeta === 1 // - 會(huì)轉(zhuǎn)為駝峰寫(xiě)法
event.currentTarget.dataset.alphabeta === 2 // 大寫(xiě)會(huì)轉(zhuǎn)為小寫(xiě)
}
})
?
事件:target
是觸發(fā)事件的源組件,currentTarget
是事件綁定的當(dāng)前組件.key
以bind
或catch
開(kāi)頭,常見(jiàn):bindtap
,catchtouchstart
.bind
事件綁定不會(huì)阻止冒泡事件向上冒泡,catch
事件綁定可以阻止冒泡事件向上冒泡.
?
type: 事件類(lèi)型
timeStamp: 事件生成時(shí)的時(shí)間截
target: 觸發(fā)事件的組件的一些屬性值集合
currentTarget: 當(dāng)前組件的一些屬性值集合
TouchEvent:
touches:當(dāng)前停留在屏幕中的觸摸點(diǎn)信息
changedTouches:當(dāng)前變化的觸摸點(diǎn)信息
?
三元操作符
let arr = x > 20 ? "dashu" : "dashucoding"
操作符
if(var !== null || var !== undefined || var !== ""){
}
?
<wxs module="util">
var sub = function(val) {
return val.substring(0, 10)
}
var sub1 = function(val) {
return val.substring(0, 7)
}
module.exports.sub1 = sub1;
module.exports.sub = sub;
</wxs>
<wxs module="util">
var sub = function(val) {
return val.substring(0, 10)
}
var subtxst = function(index) {
if (index == "1") {
return index = "病假"
} else {
return index = "事假"
}
}
module.exports.sub = sub;
module.exports.subtxst = subtxst;
</wxs>
{{util.subtxst(item.leaveType)}}
?
rpx
單位,是根據(jù)屏幕寬度進(jìn)行自適應(yīng)調(diào)整,規(guī)定的屏幕寬度為750rpx
,在官方iphone6
上的屏幕寬度是375px
,共有750
個(gè)物理像素.
?
750rpx=375px=750物理像素
1rpx=0.5px=1物理像素
?
微信小程序基礎(chǔ)
調(diào)式功能,在小程序有調(diào)式工具:
Console, Sources, Network, Storage, AppData, wxml
小程序調(diào)式三大功能區(qū):
模擬器,調(diào)式工具,小程序操作區(qū)
模擬器可以對(duì)小程序在客戶(hù)端一些真實(shí)的表現(xiàn),可以呈現(xiàn)出顯示狀態(tài).小程序中具有自定義編譯,可以用來(lái)在開(kāi)發(fā)者調(diào)式時(shí)進(jìn)入不同的場(chǎng)景.
圖片說(shuō)明
?
有時(shí)候上傳會(huì)有readme
和.gitignore
文件不會(huì)被打包上傳,目的是為了優(yōu)化大小.
如果勾了?ES6
?轉(zhuǎn)?ES5
或代碼壓縮,目的是為了優(yōu)化編譯的速度,對(duì)于體積過(guò)大的文件,工具就會(huì)跳過(guò)這些文件.
調(diào)式工具7大模塊:
Wxml、Console、Sources、Network、Appdata、Storage、Sensor、Trace
注:
uploadFile
?和?downloadFile
?暫時(shí)不支持在?Network
?Panel
?中查看
build: 編譯小程序
preview: 預(yù)覽
upload: 上傳代碼
openVendor: 打開(kāi)基礎(chǔ)庫(kù)所在目錄
openToolsLog: 打開(kāi)工具日志目錄
checkProxy(url): 檢查指定url
?
自定義數(shù)據(jù)上報(bào)
查看,點(diǎn)擊菜單欄中的 “工具 - 自定義分析” .
Storage
可以用來(lái)顯示當(dāng)前項(xiàng)目的wx.setStorage
或wx.setStorageSync
后;AppData
可以用于當(dāng)前項(xiàng)目,顯示數(shù)據(jù)情況;Console
可以用來(lái)顯示小程序的輸出信息;Sources
可以用來(lái)顯示當(dāng)前項(xiàng)目的腳本文件;Network
可以用來(lái)實(shí)現(xiàn)發(fā)送的請(qǐng)求和調(diào)用文件的信息;Wxml
可以用來(lái)查看真實(shí)的頁(yè)面結(jié)構(gòu)和屬性.
框架
小程序的框架有:
-
框架全局配置文件
-
工具類(lèi)文件
-
框架頁(yè)面文件
框架全局配置文件
一個(gè)小程序框架全局配置文件有:
app.js
,?app.json
,?app.wxss
, 三個(gè)文件組成,全局文件都是在項(xiàng)目的根目錄.
// app.js
App({
/**
* 當(dāng)小程序初始化完成時(shí),會(huì)觸發(fā) onLaunch(全局只觸發(fā)一次)
*/
// 生命周期函數(shù)
onLaunch: function() {
// 獲取小程序更新機(jī)制兼容
if (wx.canIUse('getUpdateManager')) {
const updateManager = wx.getUpdateManager()
updateManager.onCheckForUpdate(function(res) {
// 請(qǐng)求完新版本信息的回調(diào)
if (res.hasUpdate) {
updateManager.onUpdateReady(function() {
wx.showModal({
title: '更新提示',
content: '新版本已經(jīng)準(zhǔn)備好,是否重啟應(yīng)用?',
success: function(res) {
if (res.confirm) {
// 新的版本已經(jīng)下載好,調(diào)用 applyUpdate 應(yīng)用新版本并重啟
updateManager.applyUpdate()
}
}
})
})
updateManager.onUpdateFailed(function() {
// 新的版本下載失敗
wx.showModal({
title: '已經(jīng)有新版本了喲~',
content: '新版本已經(jīng)上線啦~,請(qǐng)您刪除當(dāng)前小程序,重新搜索打開(kāi)喲~',
})
})
}
})
} else {
// 如果希望用戶(hù)在最新版本的客戶(hù)端上體驗(yàn)?zāi)男〕绦?,可以這樣子提示
wx.showModal({
title: '提示',
content: '當(dāng)前微信版本過(guò)低,無(wú)法使用該功能,請(qǐng)升級(jí)到最新微信版本后重試。'
})
}
},
/**
* 當(dāng)小程序啟動(dòng),或從后臺(tái)進(jìn)入前臺(tái)顯示,會(huì)觸發(fā) onShow
*/
onShow: function(options) {
},
/**
* 當(dāng)小程序從前臺(tái)進(jìn)入后臺(tái),會(huì)觸發(fā) onHide
*/
onHide: function() {
},
/**
* 當(dāng)小程序發(fā)生腳本錯(cuò)誤,或者 api 調(diào)用失敗時(shí),會(huì)觸發(fā) onError 并帶上錯(cuò)誤信息
*/
onError: function(msg) {
}
})
?
// 定義全局?jǐn)?shù)據(jù)
globalData: {
userInfo: null
}
?
// app.json :
{
"pages": ["pages/index/index", "pages/logs/index"],
"window": {
"navigationBarTitleText": "Demo"
},
"tabBar": {
"list": [
{
"pagePath": "pages/index/index",
"text": "首頁(yè)"
},
{
"pagePath": "pages/logs/logs",
"text": "日志"
}
]
},
"networkTimeout": {
"request": 10000,
"downloadFile": 10000
},
"debug": true,
"navigateToMiniProgramAppIdList": ["wxe5f52902cf4de896"]
}
// 配置頁(yè)面路徑
// 配置窗口表現(xiàn)
// 配置標(biāo)簽導(dǎo)航
// 配置網(wǎng)絡(luò)超時(shí)
// 配置debug模式
?
頁(yè)面配置項(xiàng)列表
?
{
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "微信接口功能演示",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light"
}
navigationBarBackgroundColor 導(dǎo)航欄背景顏色
navigationBarTextStyle 導(dǎo)航欄標(biāo)題顏色
navigationBarTitleText 導(dǎo)航欄標(biāo)題文字內(nèi)容
navigationStyle 導(dǎo)航欄樣式
backgroundColor 窗口的背景色
backgroundTextStyle 下拉 loading 的樣式,僅支持 dark / light
enablePullDownRefresh 是否全局開(kāi)啟下拉刷新
onReachBottomDistance 頁(yè)面上拉觸底事件觸發(fā)時(shí)距頁(yè)面底部距離
disableScroll 設(shè)置為 true 則頁(yè)面整體不能上下滾動(dòng)
disableSwipeBack 禁止頁(yè)面右滑手勢(shì)返回
?
小程序中有工具類(lèi)文件:?utils
, 通過(guò)module.exports
進(jìn)行注冊(cè)使用.
?
App({
onLaunch: function() {
},
onShow: function() {
},
onHide: function() {
},
onError: function() {
},
globalData: 'dashucoding'
})
?
本文摘自 :https://blog.51cto.com/u