微信小程式填坑篇(一)
在微信小程式淺析中講到微信小程式原理以及怎麼新建一個hello world 工程,還挖了坑。現在把坑填上,捋一捋小程式的程式碼結構。看一下截圖:
全域性檔案
看一下目錄結構:
前面也說到,全域性檔案有且只有三個app.js、app.json、app.wxss。我們瞄一瞄裡面的內容:
app.js
//app.js
App({
onLaunch: function () {
//呼叫API從本地快取中獲取資料
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
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
})
}
},
globalData:{
userInfo:null
}
})
可以看到,app.js裡面有個app方法負責註冊小程式,該方法接收一個object物件,該object物件包含小程式的全域性資料、全域性函式和生命週期函式等。比如globalData是全域性資料,getUserInfo為全域性函式、onLaunch是啟動時呼叫的生命週期函式。值得注意的是小程式只能再裡面註冊,並且在其他地方不要呼叫生命週期函式,生命週期函式應由微信內部呼叫,我們只負責實現。
app.json
{
"pages":[
"pages/index/index",
"pages/logs/logs"
],
"window":{
"backgroundTextStyle":"light",
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "WeChat",
"navigationBarTextStyle":"black"
}
}
hello world 一共有兩個頁面,都在page項裡都進行了配置,如果沒有進行配置的話微信將無法載入頁面,還有就是頁面檔案除了字尾名外都必須同名配置項及其屬性有很多,詳見框架->配置。
app.wxss
/**app.wxss**/
.container {
height: 100%;
display: flex;
flex-direction: column;
align-items: center;
justify-content: space-between;
padding: 200rpx 0;
box-sizing: border-box;
}
這個沒什麼好說的,主要負責全域性樣式。如果頁面的子樣式有屬性和全域性屬性重合,子樣式會覆蓋全域性樣式。其實這些跟css差不多,wxss是weixin style sheets的縮寫,但是它不支援css級聯選擇器,並且為了適配,引入了rpx作為單位,詳見框架->WXSS
頁面檔案
頁面檔案除了包含js、json、wxss外,還多了一個wxml檔案。前面三個和全域性配置的功能幾乎是一樣的,只不過作用域是在頁面而不是全域性,那我們看看wxml是個什麼鬼。這裡以index頁面為例:
index.wxml
<!--index.wxml-->
<view class="container">
<view bindtap="bindViewTap" class="userinfo">
<image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</view>
<view class="usermotto">
<text class="user-motto">{{motto}}</text>
</view>
</view>
結合預覽檢視,可以看到,這是一個類似xml格式的頁面描述檔案—-wxml(WeiXin Markup Language 微信標記語言),為了後續的介紹,把剩下的兩個檔案也貼出來:
index.js
//index.js
//獲取應用例項
var app = getApp()
Page({
data: {
motto: 'Hello World',
userInfo: {}
},
//事件處理函式
bindViewTap: function() {
wx.navigateTo({
url: '../logs/logs'
})
},
onLoad: function () {
console.log('onLoad')
var that = this
//呼叫應用例項的方法獲取全域性資料
app.getUserInfo(function(userInfo){
//更新資料
that.setData({
userInfo:userInfo
})
})
}
})
index.wxss
/**index.wxss**/
.userinfo {
display: flex;
flex-direction: column;
align-items: center;
}
.userinfo-avatar {
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.userinfo-nickname {
color: #aaa;
}
.usermotto {
margin-top: 200px;
}
仔細觀察上面三個檔案,可以看到,wxml頁面的樣式是通過wxss控制的,類似於html與css。沒有什麼好說的,我們關鍵看看頁面檔案資料是如何和指令碼互動的。
在wxml中:
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
<text class="user-motto">{{motto}}</text>
在js中:
data: {
motto: 'Hello World',
userInfo: {}
}
也就是說頁面中的內容是通過{{content}}與js中data屬性中的content相對應。我們看看具體是怎麼更改的:
在頁面的onLoad方法中,呼叫app全域性物件的getUserInfo方法,並傳遞一個函式進去:
onLoad: function () {
console.log('onLoad')
var that = this
//呼叫應用例項的方法獲取全域性資料
app.getUserInfo(function(userInfo){
//更新資料
that.setData({
userInfo:userInfo
})
})
}
而在app的getUserInfo方法中:
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
typeof cb == "function" && cb(that.globalData.userInfo)
}
})
}
})
}
}
這裡為什麼在登入收到使用者資料的時候使用setData方法設定而不是直接改變data屬性的值呢?因為框架–>註冊頁面中規定了只有通過setData才能改變this.data的值,並且頁面也會更新,直接改變data的值會造成資料的混亂。
總結
總的來說,微信小程式和web前端開發原理差不多。邏輯層由js控制,檢視層由wxml和wxss進行描述和渲染。獲取更詳細的框架資訊,請點選框架;獲取檢視元件,請點選元件;獲取微信提供的js介面,請點選 API
寫了一個多小時,有點小累,發現寫得也蠻長了,繼續挖坑,下一篇再依葫蘆畫瓢寫DEMO。
相關推薦
微信小程式填坑篇(一)
在微信小程式淺析中講到微信小程式原理以及怎麼新建一個hello world 工程,還挖了坑。現在把坑填上,捋一捋小程式的程式碼結構。看一下截圖: 全域性檔案 看一下目錄結構: 前面也說到,全域性檔案有且只有三個app.js、app.json、app
微信小程式踩坑日誌(二)
indexOf 在wxml檔案中不能使用 Object.keys() toString() indexOf() ; 其中indexOf()方法在wxml中怎麼樣都返回undefined; textarea textarea在小程式中算是一個比較大的坑了;
微信小程式開發基礎篇(四)之請求、上傳、下載
針對前幾篇的基本的瞭解,然後我們首先要先學習和了解它的基本語法,我主要從API官網上學習,然後總結在這篇部落格中。供自己後期檢視。以備不時之需。因為自己也是初學者,很多的都是按照API來學習講解。 按照API的順序,我先學習網路的模組 一、請求:wx.request(OB
微信小程式開發框架——WXSS(一)
WXSS語言決定了小程式頁面的各個元素在視覺上的展示,WXSS與CSS即為相試的、為了適合微信小程式開發WXSS對CSS進行相應的修改。 width:用來設定元素'寬度' / height:用來設定元素'高度 '/
微信小程式入門學習筆記(一)
入門級的跳轉格式: wx.redirectTo():不能返回上一層頁面 wx.navigateTo():用於頁面的跳轉 以上兩個不能跳轉於"tabBar" 因此跳轉"tabBar": wx.switchTab 感謝大佬的教程解答 了我的問題 以下附上原文連結 作者
微信小程式學習之路(一)
1、前言 微信小程式所使用的是騰訊自己開發的MINA框架,MINA框架跟主流框架有很大的相似之處,是一個MVVM框架,很慶幸本人先前有學過一點點VUE所以入門MINA框架還算比較順利,由於需要完全熟悉MINA框架我還需要學習很多,所以微信小程式學習之路篇打算一
微信小程式入門到實戰(一)
瞭解小程式 什麼是小程式? 小程式其實就是一個工具,為人提供便捷服務的;隨時可用,用完即走,減少桌面上面的app數量; B2C(人與商品) 淘寶 JD P2P(人與人)微信 QQ C2P(人與服務)微信小程式 支付寶小程式 什
微信小程式從0-1(一)flex佈局之理論
目錄 這篇文章主要介紹了Flex佈局,參考了這篇文章 搭建UI介面 對於iOS開發者來說,UI佈局可以使用座標(frame),也可以使用自動佈局。對於微信小程式來說,建議使用Flex佈局。 通過上一篇的學習,我們知道了.wxss是設
【微信小程式】媒體元件(一)audio
週四沒有課,寫個部落格慶祝一下今天記錄一下audio的基本使用,首先看下效果圖。(聲音請腦補一下~)1.介紹一下audio屬性(來自微信官方文件)屬性名型別預設值說明idStringaudio 元件的唯一識別符號srcString要播放音訊的資源地址loopBooleanfa
微信小程式----運動社群開發(一)
微信小程式出來很久了,一直沒時間來學習這門新技術,去年年底有人寫了一個訂票的小程式專案,開發中遇到了問題,找到我看看能不能幫忙處理,其實當時自己什麼也不清楚,就找了個做過小程式的朋友大體瞭解了一下小程式,然後把對方的程式碼拿過來看了一下,竟然發現小程式前端的程式碼和以前的ht
微信小程式填坑之路(三):佈局適配方案(rpx、px、vw、vh)
因為小程式是以微信為平臺執行的,可以同時執行在android與ios的裝置上,所以不可避免的會遇到佈局適配問題,特別是在iphone5上,因為螢幕尺寸小的緣故,也是適配問題最多的機型,下面就簡單介紹幾種適配方法。 rpx適配 rpx是小程式中
微信小程式填坑之路(一):text空格符號以及省略號
1、text的空格符 首先需要設定<text> 控制元件的decode值 decode可以解析的有 < > & &
微信小程式填坑之路(四)--2016.12.21 更新
今天又一次更新,繼續填坑了。。 更新概述 新增分享、模板訊息、客服訊息、掃一掃、帶引數二維碼(當前僅限開發者和體驗者使用)等功能新增 4 個新 API, 2個新元件拓展了 10 個元件屬性,新增 6 個元件事件修復數十個 API 以及元件 bug,優化部分互動體驗開發者工
微信小程式填坑之路(四):微信登入獲取openid、unionid
在微信小程式中,因為各種各樣的原因我們會需要獲取到使用者的openid或者unionid下面就簡單來講一下在小程式中如何獲取openid和unionid。 步驟一:微信登入獲取登入憑證
微信小程式填坑之路之springmvc與小程式的資料互動(json)
springmvc框架寫到現在終於牽扯到小程式了(所以別說我“不務正業”),對於一個應用程式來說,它的本質其實就是無數個對資料進行增刪改查的操作,這裡起到至關重要的就是資料,於是這篇帖子的目的就是實現小程式與後臺資料的互動。小程式使用的是wx.request的api來提交和接
微信小程式填坑之路(二):cover-view
在一些情況下,我們需要對map、video、canvas、camera這些微信小程式的原生控制元件,進行自定義,比如在camera上新增一個矩形線框作為拍照區域,這時我們就需要使用到cover-view
微信小程式 填坑記錄
本文由本人簡書搬遷至此,並做小幅修改。 老闆要讓做個小程式,並且很著急。於是邊學邊幹開始做微信小程式。 過程中遇到不少坑,前期時間太緊沒有記錄,後期憑記憶簡單記一下,防止再次入坑。 1.開發工具中,本地資原始檔名(資料夾路徑未測)對大小寫不敏感,拼錯仍然能正確顯示,但在真機上敏感,拼錯不
一名Android開發者的微信小程式填坑之路(2)
前言 上一篇是九月二十七日寫的,而這一篇我動筆的時間是十月十日(特殊的日子),中間相隔十三天——當然是因為國慶節。說老實話,這十三天裡面我都沒有碰和小程式有關的東西——畢竟學習小程式的開發也只是起於興趣,而平時的工作並不會涉及與其相關的東西——但是在這十三天裡
微信小程式填坑之路(三)--上傳頭像
public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static Logger logger = LoggerFactory
一名Android開發者的微信小程式填坑之路(1)
前言 首先要宣告的是,我是一名 Android 開發者,之前基本沒有前端開發經驗,甚至連 JS ,HTML 都是為了開發小程式現學的一些皮毛——所以文章中所提到的一些點也許在資深前端開發者看來只是小case,但是站在一個 Android 開發者的角度來看確實是