昨天上班第一天,沒錯,是第一天。公司今年放假很足,撒潑的我無(tian)憂(bu)無(zhi)慮(chi)的度過了漫長的十一天,上班了發現本身得了節後綜合症,這病嚴重嗎?嗯,估計得有個禮拜才能痊癒。css
因此,放假休閒的程序猿必定要感到深深的罪惡感,爲了啥?爲了避免生病,爲了啥?html
沒出正月,都在年裏,給你們拜個晚年,祝你們晚年幸福。vue
扯了會,接下來我們開始正文,說點有用的。es6
小程序是一種不須要下載安裝便可使用的應用,它實現了應用「觸手可及」的夢想,用戶掃一掃或者搜一下便可打開應用。web
能夠理解成一套嵌套在微信裏面的app,和原生app不一樣的是不須要下載,屬於小而輕的應用。json
一、註冊帳號 二、下載開發者工具, 下載1.02.1801081
這個版本的,最新版的有bug,編譯的時候調試器Wxml
窗口會出現空的page
標籤,裏面沒有內容。編輯器內複製也會偶爾失效。小程序
三、註冊好後登陸下微信公衆平臺,在設置裏找到開發設置,把appID保存下來,一會開發的時候須要用到 api
一、此時,工具備了,ID有了,接下來開始咱們的擼碼之旅。打開開發者工具,掃碼登陸後選擇小程序項目,點擊右下角的加號,建立新項目,選擇項目目錄,填寫appID,項目名稱,寫好後點擊肯定。 數組
二、肯定之後,默認打開後,發現給咱們建立了一些代碼,代碼一會咱們再講。 sass
頁面是空白的,打開調試器後發現頁面有報錯,以下
點擊右上角的詳情,修改下配置,把調試基礎庫改爲1.9.1,而後把不校驗安全域名、web-view 域名、TLS 版本以及 HTTPS 證書
勾選上,否則咱們的請求就必須得是https
的了
三、此時控制檯沒有報錯了,頁面展現以下,點擊按鈕,咱們能夠看到微信受權,點擊容許,咱們的頭像和暱稱就顯示在頁面上了
咱們主要看app.js
、app.json
、app.wxss
三個文件和pages
文件夾裏面的wxml
一、app.js
作爲小程序的入口,裏面有個App實例,每一個小程序只會有一個App實例,小程序啓動之後觸發onLaunch函數執行,獲取用戶信息
二、app.json
是小程序的全部全局配置,pages
字段放置全部頁面的路徑,window
字段定義全部頁面的頂部背景顏色,文字顏色 詳細配置請戳這裏👇
三、app.wxss
文件就是頁面公用的樣式,僅支持部分css選擇器
四、wxml
就是咱們的HTML文件,經常使用標籤爲 view
、text
等,沒有所謂的div
、span
、p
一類的標籤了,咱們習慣稱它們爲組件
小程序內部能夠理解成一個mvvm的框架,分爲邏輯層和視圖層,邏輯層將數據進行處理後發送給視圖層,同時接受視圖層的事件反饋。
// pages/test/index.js
Page({
data:{ // 頁面的初始數據
text: 'hello world'
},
onLoad(){
console.log('hello')
},
change(){
this.setData({
text:'hello'
})
}
})
複製代碼
使用Page
函數來註冊一個頁面,接收一個Object參數。 這裏咱們使用了onLoad
來監聽頁面的加載和定義了一個change函數 並使用setData函數將text的值進行更改
更改data數據的時候必須調用setData函數進行更改
// pages/test/index.wxml
<view>{{text}}</view> // 顯示hello world
<button bindtap="change">點擊更改上面文字</button> // 顯示hello
複製代碼
咱們在button組件上添加了點擊事件,調用了change函數,完整事件請戳👇這裏
有時候咱們須要觸發事件的時候,傳遞一些參數,那小程序怎麼傳遞呢?很不幸,小程序不能相似js裏面直接傳遞,每每咱們須要將傳遞的數據綁定到事件元素上
// index.wxml
<button data-test="哈哈" bindtap="change">點擊我</button>
複製代碼
使用e.currentTarget.dataset
來獲取值
// index.js
change(e){
e.currentTarget.dataset.test // 哈哈
}
複製代碼
一、修改嵌套多層的數據, 若是是寫死的參數可使用引號將參數包起來
this.setData({
'text.msg': 'hello'
})
複製代碼
若是是傳遞進來的值呢?很簡單將data的key用[]
括起來
// index.wxml
<button bindtap="change" data-key="text.msg">點擊我</button>
複製代碼
// index.js
change(e){
var key = e.currentTarget.dataset.key
this.setData({
key: 'hello' // 數據不會更改
// [key]: 'hello' // 數據會更改
})
}
複製代碼
小程序裏面全部的頁面路由由框架進行管理
咱們可使用getCurrnetPages
函數獲取當前頁面棧的實例,返回一個數組, 最後一個元素爲當前頁面
小程序定義了五個用於導航跳轉的API,這裏列舉兩個經常使用的,詳細請戳👇這裏
一、wx.navigateTo
保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateBack
能夠返回到原頁面
wx.navigateTo({url:`/pages/text/index?text=${121212}`})
複製代碼
二、wx.redirectTo
關閉當前頁面,跳轉到應用內的某個頁面
wx.navigateTo({url:`/pages/text/index?text=${121212}`})
複製代碼
經過上面的API跳轉帶的參數,在頁面上咱們須要怎麼獲取呢?
// text.js
Page({
data:{
... // 頁面數據
},
onLoad(options){
console.log(options.text) // 121212 獲取上個頁面帶過來的值
}
})
複製代碼
若是你使用過vue
、angular
框架,對|
管道符確定不陌生,它用來對咱們的數據進行轉換,那小程序裏面有沒有過濾器呢,不過這個是真沒有。
可是目前有兩種方法,能夠實現過濾。
一、獲取數據的時候,直接改了,乾脆利落、好不優雅。 二、使用最後咱們要介紹的wxs
WXS是小程序的一套腳本語言,首先和js是不一樣的語言,其次運行環境和js也是隔離開的,wxs不能調用js文件中的函數,也不能調用小程序的API,它主要用來加強wxml。
wxs不能使用es6語法,人家不是js啦😷
接下來咱們來實現一個使用wxs實現一個簡單的過濾器 一、首先咱們建立filter.wxs
文件並寫入如下內容
// filter.wxs
var Filter = {
getSatusStr: function(num){
var str = '';
switch (num) {
case 0:
string = '我是0的狀態'
break;
case 1:
string = '我是1的狀態'
break;
default:
string = '我是默認的狀態'
break;
}
return str
}
}
module.exports = {
status: Filter.getSatusStr
}
複製代碼
同級下index.wxml使用
<wxs module="filter" src="./filter.wxs"></wxs>
<view wx:for="{{list}}">
<view>{{filter.status(item.status)}}</view>
</view>
複製代碼
總結: 一、每一個wxs
標籤都有一個module 屬性 一、wxs
能夠寫在wxml
裏面的wxs標籤裏和.wxs
文件裏 二、wxs
文件中引入其餘wxs
文件時候,可使用require函數,接受相對路徑 三、在wxml
標籤裏使用外部wxs
文件的時候,src屬性是相對路徑
一、使用sass寫wxss
文件,在目錄下建立index.scss
文件,當前目錄下執行 sass --watch index.scss:index.wxss --style expanded
二、wcss
文件裏面不能使用本地圖片,請使用base6四、網上圖片或者image
三、修改頁面的背景,相似與css中設置body,能夠直接設置page
四、不要直接操做this.data
,使用this.setData函數,切記、切記