微信小程序_(邏輯層原环、視圖層挠唆、配置文件)

1.配置文件

page.json來決定

初始化項(xiàng)目的時(shí)候,文件自動(dòng)生成app.json來對小程序進(jìn)行全局配置扮念。

2.邏輯層(App Server)

小程序開發(fā)框架的邏輯層是由JavaScript編寫损搬。

邏輯層將數(shù)據(jù)進(jìn)行處理后發(fā)送給視圖層,同時(shí)接受視圖層的事件反饋柜与。 在 JavaScript的基礎(chǔ)上,做了一些修改嵌灰,以方便地開發(fā)小程序弄匕。

1)增加 AppPage方法,進(jìn)行程序頁面的注冊沽瞭。

App()函數(shù)用來注冊一個(gè)小程序迁匠。接受一個(gè) object 參數(shù),其指定小程序的生命周期函數(shù)等驹溃。

App.prototype.getCurrentPage()
getCurrentPage() 函數(shù)用戶獲取當(dāng)前頁面的實(shí)例城丧。

var appInstance = getApp()
console.log(appInstance.globalData) // I am global data

2)App()叫做注冊程序,Page()叫做注冊頁面

Page()接受一個(gè) object參數(shù),
指定頁面的初始數(shù)據(jù)豌鹤、生命周期函數(shù)亡哄、事件處理函數(shù)等

3)初始化數(shù)據(jù)

初始化數(shù)據(jù)將作為頁面的第一次渲染。
data將會(huì)以 JSON 的形式由邏輯層傳至渲染層布疙,所以其數(shù)據(jù)必須是可以轉(zhuǎn)成JSON的格式:字符串蚊惯,數(shù)字愿卸,布爾值,對象截型,數(shù)組趴荸。

渲染層可以通過WXML 對數(shù)據(jù)進(jìn)行綁定。
eg:下面這個(gè)是一段wxml的代碼

<view>{{text}}</view>
<view>{{array[0].msg}}</view>

下面這個(gè)是一段.js代碼宦焦,data是初始化頁面數(shù)據(jù)

Page({
   data: {
   text: 'init data',
   array: [{msg: '1'}, {msg: '2'}]
   }
})

4)頁面的生命周期函數(shù)

a)onLoad: 頁面加載
一個(gè)頁面只會(huì)調(diào)用一次发钝。
參數(shù)可以獲取wx.navigateTo和wx.redirectTo及<navigator/>中的 query。這個(gè)是什么意思呢波闹?

onLoad:function(options){
    // options 就是參數(shù)
    // options.redirect
}

b)onShow: 頁面顯示

每次打開頁面都會(huì)調(diào)用一次笼平。

c)onReady: 頁面初次渲染完成

一個(gè)頁面只會(huì)調(diào)用一次,代表頁面已經(jīng)準(zhǔn)備妥當(dāng)舔痪,可以和視圖層進(jìn)行交互

對界面的設(shè)置如wx.setNavigationBarTitle請?jiān)?code>onReady之后設(shè)置

d)onHide: 頁面隱藏

當(dāng)navigateTo或底部tab切換時(shí)調(diào)用寓调。

e)onUnload: 頁面卸載

當(dāng)redirectTonavigateBack的時(shí)候調(diào)用。

5)頁面相關(guān)事件處理函數(shù)

onPullDownRefresh: 下拉刷新

監(jiān)聽用戶下拉刷新事件锄码。
需要在configwindow選項(xiàng)中開啟enablePullDownRefresh夺英。

6)事件處理函數(shù)

除了初始化數(shù)據(jù)和生命周期函數(shù),Page 中還可以定義一些特殊的函數(shù):事件處理函數(shù)滋捶。在渲染層可以在組件中加入事件綁定痛悯,當(dāng)達(dá)到觸發(fā)事件時(shí),就會(huì)執(zhí)行Page 中定義的事件處理函數(shù)重窟。

eg:

// .wxml
<view bindtap="tap_view"> click me!</view>

// .js
Page({
    tap_view:function(){
        console.log('view taped!');
    }
})

7)Page.prototype.setData()

setData函數(shù)用于將數(shù)據(jù)邏輯層發(fā)送到視圖層载萌,同時(shí)改變對應(yīng)的this.data的值。

注意:
1.直接修改 this.data無效巡扇,無法改變頁面的狀態(tài)扭仁,還會(huì)造成數(shù)據(jù)不一致。
2.單次設(shè)置的數(shù)據(jù)不能超過1024kB厅翔,請盡量避免一次設(shè)置過多的數(shù)據(jù)乖坠。

<!--index.wxml-->
<view>{{text}}</view>
<button bindtap="changeText"> Change normal data </button>
<view>{{array[0].text}}</view>
<button bindtap="changeItemInArray"> Change Array data </button>
<view>{{obj.text}}</view>
<button bindtap="changeItemInObject"> Change Object data </button>
<view>{{newField.text}}</view>
<button bindtap="addNewField"> Add new data </button>

//index.js
Page({
  data: {
    text: 'init data',
    array: [{text: 'init data'}],
    object: {
      text: 'init data'
    }
  },
  changeText: function() {
    // this.data.text = 'changed data'  // bad, it can not work
    this.setData({
      text: 'changed data'
    })
  },
  changeItemInArray: function() {
    // you can use this way to modify a danamic data path
    this.setData({
      'array[0].text':'changed data'
    })
  },
  changeItemInObject: function(){
    this.setData({
      'object.text': 'changed data'
    });
  },
  addNewField: function() {
    this.setData({
      'newField.text': 'new data'
    })
  }
})

這里的this指的是.js文件

8).頁面的路由

小程序中所有頁面的路由全部由框架進(jìn)行管理
路由方式:

a.初始化
打開新頁面:調(diào)用 API wx.navigateTo 或使用組件<navigator />(節(jié)點(diǎn)方式)

b.打開新頁面,相當(dāng)于iOS中的navpush
調(diào)用 API wx.navigateTo 或使用組件 <navigator />,調(diào)用后路由前頁面函數(shù):onHide

c.頁面重定向
調(diào)用 API wx.redirectTo 或使用組件 <navigator />,調(diào)用后路由前頁面函數(shù):onUnload

d.頁面返回
調(diào)用 API wx.navigateBack或用戶按左上角返回按鈕

e.Tab切換

Tab模式下用戶切換Tab

9)文件作用域

JavaScript 文件中聲明的變量函數(shù)只在該文件中有效刀闷;不同的文件中可以聲明相同名字的變量和函數(shù)熊泵,不會(huì)互相影響。

通過全局函數(shù) getApp() 可以獲取全局的應(yīng)用實(shí)例甸昏,如果需要全局的數(shù)據(jù)可以在 App() 中設(shè)置

10)模塊化

我們可以將一些公共的代碼抽離成為一個(gè)單獨(dú)的js 文件顽分,作為一個(gè)模塊。模塊只有通過 module.exports
才能對外暴露接口施蜜。

module.exports = {
    sayHello: sayHello
}
function sayHello(name){
    console.log('Hello' + name + '!');
}

// 使用

var common = require('common.js');   
Page({
    helloMaer:function(){
        common.sayHello('Maer');
    }
})

11)API

小程序開發(fā)框架提供許多原生api卒蘸,可以方便的掉漆微信提供的功能,eg:獲取用戶信息花墩,本地存儲(chǔ)悬秉,微信支付等.

wx.on開頭的API是監(jiān)聽某個(gè)時(shí)間發(fā)生的API接口澄步,接受一個(gè)CALLBACK函數(shù)作為參數(shù)。當(dāng)該時(shí)間觸發(fā)的時(shí)候和泌,會(huì)調(diào)用callback函數(shù)村缸。
如果沒有特殊約定,其他的api接口都接受一個(gè)object作為參數(shù)武氓。
object中可以指定success, fail, complete來接收接口調(diào)用結(jié)果梯皿。

 success     Function       接口調(diào)用成功的回調(diào)函數(shù)
 fail       Function        接口調(diào)用失敗的回調(diào)函數(shù)
 complete   Function        接口調(diào)用結(jié)束的回調(diào)函數(shù)(調(diào)用成功、失敗都會(huì)執(zhí)行)

這里舉例幾個(gè)常用的api接口:

wx.request    發(fā)起的是https請求县恕。**一個(gè)微信小程序东羹,同時(shí)只能有5個(gè)網(wǎng)絡(luò)請求連接。**

數(shù)據(jù) API 列表:

wx.getStorage  // 獲取本地?cái)?shù)據(jù)緩存
wx.setStorage  // 設(shè)置本地?cái)?shù)據(jù)緩存
wx.clearStorage // 清除本地?cái)?shù)據(jù)緩存

獲取網(wǎng)絡(luò)類型

wx.getNetworkType(OBJECT)

eg:

wx.getNetworkType({
    success:function(res){
        var networkType = res.networkType;  // 返回網(wǎng)絡(luò)類型2g,3g,4g,wifi
    }
})

界面 API 列表:

參考:https://mp.weixin.qq.com/debug/wxadoc/dev/api/

3.視圖層

框架的視圖層由WXMLWXSS編寫忠烛,由組件來進(jìn)行展示属提。

邏輯層的數(shù)據(jù)反應(yīng)成視圖,同時(shí)將視圖層的事件發(fā)送給邏輯層美尸。

組件(Component)是視圖的基本組成單元冤议。

1)WXML

WXML(WeiXin Markup Language)是框架設(shè)計(jì)的一套標(biāo)簽語言,結(jié)合基礎(chǔ)組件师坎、事件系統(tǒng)恕酸,可以構(gòu)建出頁面的結(jié)構(gòu)。

wxml作用主要有:數(shù)據(jù)綁定胯陋、列表渲染蕊温、條件渲染模板遏乔、事件义矛、引用

數(shù)據(jù)綁定:

// wxml
<view>{{message}}</view>

// page.js

Page({
data:{
message: 'Hello world'!
}
})

列表渲染

// wxml
<view wx:for="{{array}}">{{item}}</view>
// page.js
Page({
    data:{
        array:[0, 1, 2, 3, 4]
    }
})

條件渲染

<!--wxml--><view wx:if="{{view == 'WEBVIEW'}}"> WEBVIEW </view>
<view wx:elif="{{view == 'APP'}}"> APP </view>
<view wx:else="{{view == 'MINA'}}"> MINA </view>

// page.js
Page({
     data: { 
        view: 'MINA' 
     }
 })

<block/>并不是一個(gè)組件,它僅僅是一個(gè)包裝元素按灶,不會(huì)在頁面中做任何渲染症革,只接受控制屬性

 <block wx:if="{{true}}"> 
    <view> view1 </view> 
    <view> view2 </view>
</block>

模板

總結(jié):在屬性中的值都要加“”.<template is="staffName" data="{{...staffA}}"></template>
擴(kuò)展運(yùn)算符...來將一個(gè)對象展開

Page({
    data:{
         staffA:{firstname:'a', lastname:'b'}
    }
})

注意: 如果js:Page({
data:{
foo:'a',
bar:'b'
}
})`

<template data={{foo, bar}}> data組合對象為:{foo:'a', bar:'b'}

<template data={{'A':foo, 'B':bar}}> data組合對象為:{'A':'a', 'B':'b'}

模板擁有自己的作用域,只能使用data傳入的數(shù)據(jù)鸯旁。

事件
eg:

<view bindtap="add">{{count}}</view>

Page({
    data:{
         count:1
    }
    add: function(e){
         this.setData({
             count:this.data.count + 1
         })
    }
})

2)wxml
為了適應(yīng)廣大的前端開發(fā)者,WXSS具有 CSS 大部分特性量蕊。 同時(shí)為了更適合開發(fā)微信小程序铺罢,對 CSS 進(jìn)行了擴(kuò)充以及修改。

尺寸單位

rpx(responsive pixel) 規(guī)定屏幕寬為750rpx
樣式導(dǎo)入
使用@import
語句可以導(dǎo)入外聯(lián)樣式表残炮,@import
后跟需要導(dǎo)入的外聯(lián)樣式表的相對路徑韭赘,用;
表示語句結(jié)束。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末势就,一起剝皮案震驚了整個(gè)濱河市泉瞻,隨后出現(xiàn)的幾起案子脉漏,更是在濱河造成了極大的恐慌,老刑警劉巖袖牙,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侧巨,死亡現(xiàn)場離奇詭異,居然都是意外死亡鞭达,警方通過查閱死者的電腦和手機(jī)司忱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來畴蹭,“玉大人坦仍,你說我怎么就攤上這事∵督螅” “怎么了繁扎?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長糊闽。 經(jīng)常有香客問我梳玫,道長,這世上最難降的妖魔是什么墓怀? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任汽纠,我火速辦了婚禮,結(jié)果婚禮上傀履,老公的妹妹穿的比我還像新娘虱朵。我一直安慰自己,他們只是感情好钓账,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布碴犬。 她就那樣靜靜地躺著,像睡著了一般梆暮。 火紅的嫁衣襯著肌膚如雪服协。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天啦粹,我揣著相機(jī)與錄音偿荷,去河邊找鬼。 笑死唠椭,一個(gè)胖子當(dāng)著我的面吹牛跳纳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贪嫂,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼寺庄,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起斗塘,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤赢织,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后馍盟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體于置,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年朽合,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了俱两。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡曹步,死狀恐怖宪彩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情讲婚,我是刑警寧澤尿孔,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站筹麸,受9級特大地震影響活合,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜物赶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一白指、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酵紫,春花似錦告嘲、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至参歹,卻和暖如春仰楚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背犬庇。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工僧界, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人臭挽。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓捎泻,卻偏偏與公主長得像,于是被迫代替她去往敵國和親埋哟。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 昨天看了一下微信小程序官方文檔,總結(jié)一下自己學(xué)習(xí)的個(gè)人心得. 首先從官方文檔給的框架說起,微信小程序官方文檔給出了...
    Mr大大大閱讀 47,167評論 9 68
  • 微信小程序在無論在功能、文檔及相關(guān)支持方面赤赊,都是優(yōu)于前面幾種微信賬號類型闯狱,它提供了很多原生程序才有的接口,使得我們...
    未央大佬閱讀 2,299評論 0 12
  • WXML WXML(WeiXin Markup Language)是微信的一套標(biāo)簽語言抛计,結(jié)合基礎(chǔ)組件哄孤、事件系統(tǒng),可...
    許劍鋒閱讀 6,816評論 3 51
  • 最近做了一個(gè)投票的微信小程序吹截,開發(fā)過程主要還是參考官方文檔:https://mp.weixin.qq.com/de...
    june5253閱讀 22,005評論 1 11
  • python兩個(gè)有意思的包:vte,pygtk. 期待將來學(xué)習(xí)用C語言調(diào)用這兩個(gè)包瘦陈。
    鄧樓平閱讀 186評論 0 0