最近,由于工作需要開始了解微信小程序,雖然小程序已經(jīng)出了很久了,剛出的那段時間很火,看到很多關于小程序的技術文章,不過現(xiàn)在似乎沒那么火了,anyway,我們還是可以學習下的。
1.理念:小程序開發(fā)框架的目標是通過盡可能簡單、高效的方式讓開發(fā)者可以在微信中開發(fā)具有原生 APP 體驗的服務。
2.框架:框架的核心是一個響應的數(shù)據(jù)綁定系統(tǒng)。整個系統(tǒng)分為兩塊視圖層(View)和邏輯層(App Service),框架可以讓數(shù)據(jù)與視圖非常簡單地保持同步。當做數(shù)據(jù)修改的時候,只需要在邏輯層修改數(shù)據(jù),視圖層就會做相應的更新。
3.相關資料:調試工具下載,簡易教程
初步了解這些基本信息后,我們先來看下TODOS這個應用做出來的最終效果
功能演示:

目錄結構:

主要功能模塊為:
index頁面,新建任務,可完成增刪等操作
los頁面,記錄在index頁面的操作
下面我們詳細介紹下
1.簡單配置app.json文件:
{"pages":["pages/index/index", // 設置頁面路徑,項目打開后找到這個路徑下的文件"pages/logs/logs"],"window":{ // 設置默認頁面的窗口表現(xiàn)"backgroundTextStyle":"light","navigationBarBackgroundColor": "#fff","navigationBarTitleText": "TODOS","navigationBarTextStyle":"black"},"tabBar": { // 設置底部tab的表現(xiàn)"borderStyle": "white","backgroundColor": "#f5f5f5","selectedColor": "#222","list": [ // 對應底部下面兩個菜單項;TODOS和LOGS{"pagePath": "pages/index/index","text": "TODOS","iconPath": "images/home.png","selectedIconPath": "images/home-actived.png"},{"pagePath": "pages/logs/logs","text": "LOGS","iconPath": "images/note.png","selectedIconPath": "images/note-actived.png"}]}}2.app.js和app.wxss文件
App() 函數(shù)用來注冊一個小程序。接受一個 object 參數(shù),其指定小程序的生命周期函數(shù)等。App() 必須在 app.js 中注冊,且不能注冊多個。
示例代碼
App({onLaunch: function() { // Do something initial when launch.},onShow: function() {// Do something when show.},onHide: function() {// Do something when hide.},onError: function(msg) {console.log(msg)},globalData: 'I am global data'})在這個項目中不需要加什么代碼在App({})中,所以文件中只有一個App({})
app.wxss文件主要可以設置一些全局樣式
page {height: 100%;font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;}3.注冊頁面Page
Page() 函數(shù)用來注冊一個頁面。接受一個 object 參數(shù),其指定頁面的初始數(shù)據(jù)、生命周期函數(shù)、事件處理函數(shù)等。
// ===== 頁面數(shù)據(jù)對象 =====data: {input: '',todos: [],leftCount: 0,allCompleted: false,logs: [],addOneLoading: false,loadingHidden: true,loadingText: '',toastHidden: true,toastText: '',clearAllLoading: false},
初始化數(shù)據(jù)作為頁面的第一次渲染。data將會以JSON的形式由邏輯層傳至渲染層,其數(shù)據(jù)可以是:字符串,數(shù)字,布爾值,對象,數(shù)組。
渲染層可以通過WXML對數(shù)據(jù)進行綁定。
<input class="new-todo" value="{{ input }}" placeholder="Anything here..." auto-focus bindinput="inputChangeHandle" bindchange="addTodoHandle"/>如上述代碼中的input.// ===== 頁面生命周期方法 =====onLoad: function () {// 從緩存獲取任務列表數(shù)據(jù),并用setData設置var todos = wx.getStorageSync('todo_list') // 調用 WX API 從本地緩存中獲取數(shù)據(jù)if (todos) {var leftCount = todos.filter(function (item) {return !item.completed新聞熱點
疑難解答