初探微信小程序

概念

小程序是一種不需要下載安裝即可使用的應用,它實現(xiàn)了應用“觸手可及”的夢想,用戶掃一掃或者搜一下即可打開應用。

可以理解成一套嵌套在微信里面的app,和原生app不同的是不需要下載,屬于小而輕的應用。

開發(fā)前的準備

1、注冊賬號
2、下載開發(fā)者工具, 下載1.02.1801081這個版本的,最新版的有bug,編譯的時候調試器Wxml窗口會出現(xiàn)空的page標簽,里面沒有內容。編輯器內復制也會偶爾失效。

下載版本

3、注冊好后登錄下微信公眾平臺,在設置里找到開發(fā)設置,把appID保存下來,一會開發(fā)的時候需要用到

appID

快速開始

1、此時,工具有了,ID有了,接下來開始我們的擼碼之旅。打開開發(fā)者工具,掃碼登錄后選擇小程序項目,點擊右下角的加號,創(chuàng)建新項目,選擇項目目錄,填寫appID,項目名稱,寫好后點擊確定。


小程序管理
填寫信息

2、確定以后,默認打開后,發(fā)現(xiàn)給我們創(chuàng)建了一些代碼,代碼一會我們再講。


目錄.png

頁面是空白的,打開調試器后發(fā)現(xiàn)頁面有報錯,如下

image.png

點擊右上角的詳情,修改下配置,把調試基礎庫改成1.9.1,然后把不校驗安全域名、web-view 域名、TLS 版本以及 HTTPS 證書勾選上,不然我們的請求就必須得是https的了

修改配置

3、此時控制臺沒有報錯了,頁面展示如下,點擊按鈕,我們可以看到微信授權,點擊允許,我們的頭像和昵稱就顯示在頁面上了

頁面展示.png
用戶信息展示

項目結構

我們主要看app.js、app.jsonapp.wxss三個文件和pages文件夾里面的wxml

1、app.js做為小程序的入口,里面有個App實例,每個小程序只會有一個App實例,小程序啟動以后觸發(fā)onLaunch函數(shù)執(zhí)行,獲取用戶信息

2、app.json是小程序的所有全局配置,pages字段放置所有頁面的路徑,window字段定義所有頁面的頂部背景顏色,文字顏色 詳細配置請戳這里??

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

4、wxml就是我們的HTML文件,常用標簽為 view 、text 等,沒有所謂的divspan、p一類的標簽了,我們習慣稱它們?yōu)榻M件

設計理念

小程序內部可以理解成一個mvvm的框架,分為邏輯層和視圖層,邏輯層將數(shù)據進行處理后發(fā)送給視圖層,同時接受視圖層的事件反饋。

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

使用Page函數(shù)來注冊一個頁面,接收一個Object參數(shù)。
這里我們使用了onLoad來監(jiān)聽頁面的加載和定義了一個change函數(shù)
并使用setData函數(shù)將text的值進行更改

更改data數(shù)據的時候必須調用setData函數(shù)進行更改

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

我們在button組件上添加了點擊事件,調用了change函數(shù),完整事件請戳??這里

事件傳遞參數(shù)

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

// index.wxml
<button data-test="哈哈"  bindtap="change">點擊我</button>

使用e.currentTarget.dataset來獲取值

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

setData函數(shù)拓展

1、修改嵌套多層的數(shù)據,
如果是寫死的參數(shù)可以使用引號將參數(shù)包起來

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'     // 數(shù)據不會更改
  //  [key]: 'hello' //  數(shù)據會更改
  })
}

路由

小程序里面所有的頁面路由由框架進行管理

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

小程序定義了五個用于導航跳轉的API,這里列舉兩個常用的,詳細請戳??這里

1、wx.navigateTo 保留當前頁面,跳轉到應用內的某個頁面,使用wx.navigateBack可以返回到原頁面

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

2、wx.redirectTo 關閉當前頁面,跳轉到應用內的某個頁面

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

通過上面的API跳轉帶的參數(shù),在頁面上我們需要怎么獲取呢?

// text.js
Page({
  data:{
     ... // 頁面數(shù)據
  },
  onLoad(options){
    console.log(options.text)  // 121212 獲取上個頁面帶過來的值
  }
})

數(shù)據過濾 過濾器

如果你使用過vue、angular框架,對|管道符肯定不陌生,它用來對我們的數(shù)據進行轉換,那小程序里面有沒有過濾器呢,不過這個是真沒有。

但是目前有兩種方法,可以實現(xiàn)過濾。

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

WXS

WXS是小程序的一套腳本語言,首先和js是不同的語言,其次運行環(huán)境和js也是隔離開的,wxs不能調用js文件中的函數(shù),也不能調用小程序的API,它主要用來增強wxml。

wxs不能使用es6語法,人家不是js啦??

接下來我們來實現(xiàn)一個使用wxs實現(xiàn)一個簡單的過濾器
1、首先我們創(chuàng)建filter.wxs文件并寫入以下內容

// 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 = '我是默認的狀態(tài)'
        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>

總結:
1、每個wxs標簽都有一個module 屬性
1、wxs可以寫在wxml里面的wxs標簽里和.wxs文件里
2、wxs文件中引入其他wxs文件時候,可以使用require函數(shù),接受相對路徑
3、在wxml標簽里使用外部wxs文件的時候,src屬性是相對路徑

tip

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

2、wcss 文件里面不能使用本地圖片,請使用base64、網上圖片或者image

3、修改頁面的背景,類似與css中設置body,可以直接設置page

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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容