初探微信小程序

概念

小程序是一種不需要下載安裝即可使用的應(yīng)用,它實(shí)現(xiàn)了應(yīng)用“觸手可及”的夢(mèng)想槽棍,用戶(hù)掃一掃或者搜一下即可打開(kāi)應(yīng)用。

可以理解成一套嵌套在微信里面的app拼岳,和原生app不同的是不需要下載耐版,屬于小而輕的應(yīng)用滴须。

開(kāi)發(fā)前的準(zhǔn)備

1扔水、注冊(cè)賬號(hào)
2、下載開(kāi)發(fā)者工具, 下載1.02.1801081這個(gè)版本的主届,最新版的有bug君丁,編譯的時(shí)候調(diào)試器Wxml窗口會(huì)出現(xiàn)空的page標(biāo)簽绘闷,里面沒(méi)有內(nèi)容。編輯器內(nèi)復(fù)制也會(huì)偶爾失效扒最。

下載版本

3吧趣、注冊(cè)好后登錄下微信公眾平臺(tái)再菊,在設(shè)置里找到開(kāi)發(fā)設(shè)置,把a(bǔ)ppID保存下來(lái)泛豪,一會(huì)開(kāi)發(fā)的時(shí)候需要用到

appID

快速開(kāi)始

1诡曙、此時(shí)略水,工具有了渊涝,ID有了跨释,接下來(lái)開(kāi)始我們的擼碼之旅。打開(kāi)開(kāi)發(fā)者工具岁疼,掃碼登錄后選擇小程序項(xiàng)目捷绒,點(diǎn)擊右下角的加號(hào)暖侨,創(chuàng)建新項(xiàng)目,選擇項(xiàng)目目錄函荣,填寫(xiě)appID傻挂,項(xiàng)目名稱(chēng)金拒,寫(xiě)好后點(diǎn)擊確定套腹。


小程序管理
填寫(xiě)信息

2幢码、確定以后症副,默認(rèn)打開(kāi)后政基,發(fā)現(xiàn)給我們創(chuàng)建了一些代碼沮明,代碼一會(huì)我們?cè)僦v荐健。


目錄.png

頁(yè)面是空白的摧扇,打開(kāi)調(diào)試器后發(fā)現(xiàn)頁(yè)面有報(bào)錯(cuò)扛稽,如下

image.png

點(diǎn)擊右上角的詳情,修改下配置矮慕,把調(diào)試基礎(chǔ)庫(kù)改成1.9.1啄骇,然后把不校驗(yàn)安全域名缸夹、web-view 域名虽惭、TLS 版本以及 HTTPS 證書(shū)勾選上,不然我們的請(qǐng)求就必須得是https的了

修改配置

3、此時(shí)控制臺(tái)沒(méi)有報(bào)錯(cuò)了研侣,頁(yè)面展示如下庶诡,點(diǎn)擊按鈕寓盗,我們可以看到微信授權(quán)璧函,點(diǎn)擊允許傀蚌,我們的頭像和昵稱(chēng)就顯示在頁(yè)面上了

頁(yè)面展示.png
用戶(hù)信息展示

項(xiàng)目結(jié)構(gòu)

我們主要看app.jsapp.json蘸吓、app.wxss三個(gè)文件和pages文件夾里面的wxml

1善炫、app.js做為小程序的入口,里面有個(gè)App實(shí)例库继,每個(gè)小程序只會(huì)有一個(gè)App實(shí)例箩艺,小程序啟動(dòng)以后觸發(fā)onLaunch函數(shù)執(zhí)行,獲取用戶(hù)信息

2宪萄、app.json是小程序的所有全局配置,pages字段放置所有頁(yè)面的路徑拜英,window字段定義所有頁(yè)面的頂部背景顏色静汤,文字顏色 詳細(xì)配置請(qǐng)戳這里??

3、app.wxss文件就是頁(yè)面公用的樣式,僅支持部分css選擇器

4虫给、wxml就是我們的HTML文件藤抡,常用標(biāo)簽為 viewtext 等抹估,沒(méi)有所謂的div缠黍、spanp一類(lèi)的標(biāo)簽了药蜻,我們習(xí)慣稱(chēng)它們?yōu)榻M件

設(shè)計(jì)理念

小程序內(nèi)部可以理解成一個(gè)mvvm的框架瓷式,分為邏輯層和視圖層,邏輯層將數(shù)據(jù)進(jìn)行處理后發(fā)送給視圖層语泽,同時(shí)接受視圖層的事件反饋蒿往。

// pages/test/index.js
Page({
  data:{  // 頁(yè)面的初始數(shù)據(jù)
      text: 'hello world'
  },
  onLoad(){
    console.log('hello')
  },
  change(){
    this.setData({
    text:'hello'
  })
  }
})

使用Page函數(shù)來(lái)注冊(cè)一個(gè)頁(yè)面,接收一個(gè)Object參數(shù)湿弦。
這里我們使用了onLoad來(lái)監(jiān)聽(tīng)頁(yè)面的加載和定義了一個(gè)change函數(shù)
并使用setData函數(shù)將text的值進(jìn)行更改

更改data數(shù)據(jù)的時(shí)候必須調(diào)用setData函數(shù)進(jìn)行更改

// pages/test/index.wxml
<view>{{text}}</view> //  顯示hello world
<button bindtap="change">點(diǎn)擊更改上面文字</button> //  顯示hello 

我們?cè)赽utton組件上添加了點(diǎn)擊事件瓤漏,調(diào)用了change函數(shù),完整事件請(qǐng)戳??這里

事件傳遞參數(shù)

有時(shí)候我們需要觸發(fā)事件的時(shí)候颊埃,傳遞一些參數(shù)蔬充,那小程序怎么傳遞呢?很不幸班利,小程序不能類(lèi)似js里面直接傳遞饥漫,往往我們需要將傳遞的數(shù)據(jù)綁定到事件元素上

// index.wxml
<button data-test="哈哈"  bindtap="change">點(diǎn)擊我</button>

使用e.currentTarget.dataset來(lái)獲取值

// index.js
change(e){
  e.currentTarget.dataset.test  // 哈哈
}

setData函數(shù)拓展

1、修改嵌套多層的數(shù)據(jù)罗标,
如果是寫(xiě)死的參數(shù)可以使用引號(hào)將參數(shù)包起來(lái)

this.setData({
    'text.msg': 'hello'
})

如果是傳遞進(jìn)來(lái)的值呢庸队?很簡(jiǎn)單將data的key用[]括起來(lái)

// index.wxml
<button bindtap="change" data-key="text.msg">點(diǎn)擊我</button>
// index.js
change(e){
var key = e.currentTarget.dataset.key
  this.setData({
    key: 'hello'     // 數(shù)據(jù)不會(huì)更改
  //  [key]: 'hello' //  數(shù)據(jù)會(huì)更改
  })
}

路由

小程序里面所有的頁(yè)面路由由框架進(jìn)行管理

我們可以使用getCurrnetPages函數(shù)獲取當(dāng)前頁(yè)面棧的實(shí)例,返回一個(gè)數(shù)組, 最后一個(gè)元素為當(dāng)前頁(yè)面

小程序定義了五個(gè)用于導(dǎo)航跳轉(zhuǎn)的API闯割,這里列舉兩個(gè)常用的彻消,詳細(xì)請(qǐng)戳??這里

1、wx.navigateTo 保留當(dāng)前頁(yè)面宙拉,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面宾尚,使用wx.navigateBack可以返回到原頁(yè)面

wx.navigateTo({url:`/pages/text/index?text=${121212}`})

2、wx.redirectTo 關(guān)閉當(dāng)前頁(yè)面谢澈,跳轉(zhuǎn)到應(yīng)用內(nèi)的某個(gè)頁(yè)面

wx.navigateTo({url:`/pages/text/index?text=${121212}`})

通過(guò)上面的API跳轉(zhuǎn)帶的參數(shù)煌贴,在頁(yè)面上我們需要怎么獲取呢?

// text.js
Page({
  data:{
     ... // 頁(yè)面數(shù)據(jù)
  },
  onLoad(options){
    console.log(options.text)  // 121212 獲取上個(gè)頁(yè)面帶過(guò)來(lái)的值
  }
})

數(shù)據(jù)過(guò)濾 過(guò)濾器

如果你使用過(guò)vue锥忿、angular框架牛郑,對(duì)|管道符肯定不陌生,它用來(lái)對(duì)我們的數(shù)據(jù)進(jìn)行轉(zhuǎn)換敬鬓,那小程序里面有沒(méi)有過(guò)濾器呢淹朋,不過(guò)這個(gè)是真沒(méi)有灶似。

但是目前有兩種方法,可以實(shí)現(xiàn)過(guò)濾瑞你。

1酪惭、獲取數(shù)據(jù)的時(shí)候,直接改了者甲,干脆利落春感、好不優(yōu)雅。
2虏缸、使用最后我們要介紹的wxs

WXS

WXS是小程序的一套腳本語(yǔ)言鲫懒,首先和js是不同的語(yǔ)言,其次運(yùn)行環(huán)境和js也是隔離開(kāi)的刽辙,wxs不能調(diào)用js文件中的函數(shù)窥岩,也不能調(diào)用小程序的API,它主要用來(lái)增強(qiáng)wxml宰缤。

wxs不能使用es6語(yǔ)法颂翼,人家不是js啦??

接下來(lái)我們來(lái)實(shí)現(xiàn)一個(gè)使用wxs實(shí)現(xiàn)一個(gè)簡(jiǎn)單的過(guò)濾器
1、首先我們創(chuàng)建filter.wxs文件并寫(xiě)入以下內(nèi)容

// filter.wxs
var Filter = {
  getSatusStr: function(num){
    var str = '';
    switch (num) {
      case 0:
        string = '我是0的狀態(tài)'
        break;
      case 1:
        string = '我是1的狀態(tài)'
        break;
      default:
        string = '我是默認(rèn)的狀態(tài)'
        break;
    }
    return str
  }
}
module.exports = {
  status: Filter.getSatusStr
}

同級(jí)下index.wxml使用

<wxs module="filter" src="./filter.wxs"></wxs> 
<view wx:for="{{list}}">
  <view>{{filter.status(item.status)}}</view>  
</view>

總結(jié):
1慨灭、每個(gè)wxs標(biāo)簽都有一個(gè)module 屬性
1朦乏、wxs可以寫(xiě)在wxml里面的wxs標(biāo)簽里和.wxs文件里
2、wxs文件中引入其他wxs文件時(shí)候氧骤,可以使用require函數(shù)呻疹,接受相對(duì)路徑
3、在wxml標(biāo)簽里使用外部wxs文件的時(shí)候筹陵,src屬性是相對(duì)路徑

tip

1刽锤、使用sass寫(xiě)wxss文件,在目錄下創(chuàng)建index.scss文件朦佩,當(dāng)前目錄下執(zhí)行 sass --watch index.scss:index.wxss --style expanded

2并思、wcss 文件里面不能使用本地圖片,請(qǐng)使用base64吕粗、網(wǎng)上圖片或者image

3纺荧、修改頁(yè)面的背景,類(lèi)似與css中設(shè)置body颅筋,可以直接設(shè)置page

4、不要直接操作this.data,使用this.setData函數(shù)输枯,切記议泵、切記

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市桃熄,隨后出現(xiàn)的幾起案子先口,更是在濱河造成了極大的恐慌型奥,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件碉京,死亡現(xiàn)場(chǎng)離奇詭異厢汹,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)谐宙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)烫葬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人凡蜻,你說(shuō)我怎么就攤上這事搭综。” “怎么了划栓?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵兑巾,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我忠荞,道長(zhǎng)蒋歌,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任委煤,我火速辦了婚禮奋姿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘素标。我一直安慰自己称诗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布头遭。 她就那樣靜靜地躺著寓免,像睡著了一般。 火紅的嫁衣襯著肌膚如雪计维。 梳的紋絲不亂的頭發(fā)上袜香,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音鲫惶,去河邊找鬼蜈首。 笑死,一個(gè)胖子當(dāng)著我的面吹牛欠母,可吹牛的內(nèi)容都是我干的欢策。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼赏淌,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼踩寇!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起六水,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤俺孙,失蹤者是張志新(化名)和其女友劉穎辣卒,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體睛榄,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡荣茫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了场靴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片啡莉。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖憎乙,靈堂內(nèi)的尸體忽然破棺而出票罐,到底是詐尸還是另有隱情,我是刑警寧澤泞边,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布该押,位于F島的核電站,受9級(jí)特大地震影響阵谚,放射性物質(zhì)發(fā)生泄漏蚕礼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一梢什、第九天 我趴在偏房一處隱蔽的房頂上張望奠蹬。 院中可真熱鬧,春花似錦嗡午、人聲如沸囤躁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)狸演。三九已至,卻和暖如春僻他,著一層夾襖步出監(jiān)牢的瞬間宵距,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工吨拗, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留满哪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓劝篷,卻偏偏與公主長(zhǎng)得像哨鸭,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子携龟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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