小程序初體驗:手把手教你寫出第一個小程序(一)

本文筆者將根據quick start中的范例代碼,帶大家簡單地剖析一下小程序的運行方式,并介紹小程序開發中一些通用的特性,帶著大家一步步寫出自己的小程序。

適用對象:前端初學者,對小程序開發感興趣者

tips:由于筆者也是一位前端菜鳥,所以盡量用簡單直白的語言為大家講解,如有說的不到位的地方,還望多多指教。

吊了我們一年胃口的小程序終于和大家見面了。經過了一天的發酵,小程序已經成為了今天的超級頭條(汪汪哭暈在廁所)。

經歷了一天媒體對小程序的狂轟濫炸,相信大家對于小程序一定充滿了好奇。與其跟風轉發朋友圈,不如試著自己動手,寫一個自己的小程序吧。

食材:

小程序模擬器:微信小程序官方模擬器

官方提供的下載頁面

食材非常的簡單,只需要下載官方提供的模擬器(根據自己電腦的版本下載),下載安裝完畢以后所有的環境就搭建完成了,不需要再配置其他依賴,不得不說大廠考慮的還是比較周全的。

初始化配置

下載完畢后啟動文件,會出現一個二維碼,用任意的微信賬號掃碼登錄即可。

掃碼登錄界面。

登錄成功后選擇第一項“本地小程序項目。

登錄成功后的界面
接著點擊“添加項目”。

接下來會進入初始化界面。

初始化界面

第一項AppID可以暫時選擇不填(部分API受限但并不影響我們本次試驗),如果你和筆者一樣是個窮學生或者是個人開發者的話,當然如果有公測賬號可以選擇輸入自己的AppID。

項目名稱這里我們填:FirstApp, 項目目錄選擇一個常用的目錄即可,記得勾選“在當前目錄中創建quick start 項目”(選中后系統會為我們生成一個簡單的頁面,否則什么也不生成)。接著點擊“添加項目”。

接下來就進入到小程序模擬器的主界面:

主界面

界面左邊是當前正在運行?的程序的預覽視圖,每次我們編輯完代碼按 ctrl/ command + s 保存,預覽視圖就會自動刷新至最新狀態。

中間是當前工作的項目目錄,這里我們會發現模擬器已經自動幫我們生成了一些初始化的代碼。待會我們再來一一介紹這些文件分別是用來干什么的。

右邊就是我們的代碼編輯區,這里就是我們敲代碼的地方啦。

快速上手

在深入講解之前我們先來敲一下代碼

點擊項目目錄中的 index.wxml,在第9行輸入如下代碼:

編輯完后保存,這時你會看到右邊預覽界面發生了變化。


我們發現原有的Hello World下面出現了另外一個Hello World,而且試著用鼠標點擊一下,就會發現似乎是可以編輯的。這是因為我們添加了<input />標簽,它可以監聽用戶鍵盤的輸入。

更多詳情請看 input | WeChat

接下來我們打開 index.js,輸入如下代碼(注意大小寫及用于分隔屬性的逗號):

保存以后試著在剛才新添加的輸入框中編輯一下,登登登登?。?/p>


可以看到文本內容就會隨著我們輸入框內容的改變而改變啦!


理論時間(不感冒的可選擇跳過)

熟悉VM框架的人看到這里可能會很有親切感,沒錯,微信團隊吸取了它們的一些特性,只不過這里的用法更簡潔。

只要你在每個頁面對應的Page對象的data屬性中定義了新的變量,那么頁面的wxml就可以用Mustache 語法(雙大括號)全局地讀取到你定義在data屬性中的變量。

簡單地說,就是只要你在data設置了一個新屬性:

Page({

? ? data: {

? ? ? ? ? 新屬性 :新屬性的值

? ? }

})

在 .wxml中就可這樣調用它:

<view>{{ 新屬性 }}</view> ? ? ? ?<-- 頁面中會顯示 “ 新屬性的值 ” /-->

想要修改data中的值官方推薦使用 setData 方法,使用 this.data.變量名 可在 .js 文件中獲取data中的數據。范例如下:

var newMotto = this.data.motto + ' ! '

this.setData({

? ? ?motto:newMotto

})

想了解更多請查閱 數據綁定 | WeChat

注意看index.wxml中我們在<input />標簽中加入了 bindinput屬性,這是一個事件綁定的使用方式。意思就是當我們在這個輸入框進行任意輸入時,都會觸發bindinput屬性對應的函數或代碼塊,在這里我們讓其觸發 inputMotto() 函數。

inputMotto

可以看到這個inputMotto屬性被賦值了一個匿名函數,這個函數接收一個事件對象e(可以取任意名字),這是該函數被回調時被傳入的。里面包含了觸發及被觸發對象的一些信息,其中就有我們需要的輸入框中的值。它被存儲在 e.detail.value 中。

打印在 console 的 e.detail 的內容如下:

可以看到 cursor 為當前輸入框中的文本長度,value 為文本值。


接下來教大家使用微信提供的API(接口)。

在index.wxml中輸入:


保存后查看頁面:

可以看到我們為頁面添加了一個按鈕<button>標簽及圖片<image>標簽,其中按鈕綁定了點擊事件chooseImage,也就是說當我們點擊按鈕是就會觸發chooseImage方法。

而圖片則用 tempFilePathSet 作為src資源路徑,style屬性是為圖片設置的樣式。因為當前src為空,故圖片沒有顯示。

在index.js中輸入:

可以看到我們首先在data中定義了 tempFilePathSet 屬性(第8行),接著定義了 chooseImage 方法。

在第37行,我們調用了小程序為我們設置的全局 wx 對象,這個對象包含了所有微信暴露出來的接口。

也就是說,如果我想使用微信內置的一些功能,比如獲取用戶基本信息,讀取圖片,獲取位置,微信支付等,我們只能通過調用 wx 對象中的方法來實現。

在這里我們使用了 wx 對象中的 chooseImage 方法來讀取用戶本地圖片。success 方法將會在獲取到本地圖片路徑成功后被回調,并被傳入 res 參數,這個參數包含了用戶所選取的圖片的本地路徑。

代碼編輯完畢后保存,點擊之前定義的 chooseImage 按鈕,這時會發現出現一個彈出框(在手機端應為微信讀取界面),選擇一張圖片后,登登登登~~

好了,看到這里你應該對于小程序有了基本的了解。雖然我們只是做了一些很簡單的功能,但是小程序開發中所需要的大部分內容其實都已經涉及到了。接下來請跟我回溯一下:

1. 我們首先在 page 中定義好界面中所需要的數據及方法。

2. 接著在頁面中添加了組件,并為其綁定了事件。

3. 然后調用了微信的API,并通過API獲取我們需要的數據或操作。

雖然實際開發中還有些細枝末節的東西需要我們去考慮,但是總體而言都離不開這三個步驟。

趕緊來試試吧

下集預告:想知道小程序究竟是怎么運行起來的?就讓我們在下一章節繼續深入地剖析一下小程序的內部運行機制吧。

未完待續


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,782評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,643評論 25 708
  • 歡迎關注微信公眾號:簡借(zljianjie),你永遠都不知道我們要發什么 11月12日,網上有消息稱,當天兩架表...
    簡借閱讀 619評論 0 0
  • 6月22日 這幾天覺得好累,想放下手機休息休息,看看身邊的人和事,去發現一下身邊的資源。想了一天都沒做到,還是會主...
    happyMia閱讀 308評論 0 0
  • 今天看完這本書,想想自己34年真的是白過了,從來沒有認真思考過自己,給自己養成良好的習慣,種一棵樹最好的時間是十年...
    簡而美的生活閱讀 237評論 0 0