1. 程式人生 > 實用技巧 >關於初次寫微信小程式的注意事項(以簡單的日曆手賬為例項)

關於初次寫微信小程式的注意事項(以簡單的日曆手賬為例項)

一、環境配置

首先,製作微信小程式需要到官網https://mp.weixin.qq.com/註冊賬號並且下載微信開發者工具。

在官網完善小程式的資訊,即可得到小程式AppID。在使用小程式·雲開發需要使用此AppID。

開啟新建的小程式,可以看到以下目錄

在components資料夾下可以存放很多從github上下載的外掛,比如日曆外掛等等。
pages下的index/index.html是我們這個小程式的預設的主頁,一般初始化的小程式雲開發index有獲取openid和前端操作資料庫的方法。

二、例項演示

以做一個手賬小程式為例:

1.跳轉頁面

簡單的手賬要有主介面和一個新增事件的介面。
這兩個頁面的跳轉需要用到wx.navigateTo(Object object)和wx.navigateBack(Object object)兩個函式,實現頁面的跳轉和返回,這兩個函式一般放在onLoad當中,

  onLoad: function (options) {
        bindViewTap: function() {
              wx.navigateTo({//保留當前頁面,跳轉到應用內的某個頁面。但是不能跳到 tabbar 頁面。小程式中頁面棧最多十層。
                    url: '../../..'
              })
        },
        /*
        bindViewTap: function() {
              wx.navigateBack({//關閉當前頁面,返回上一頁面或多級頁面。可通過 getCurrentPages 獲取當前的頁面棧,決定需要返回幾層。
                    delta: 2//返回兩層
              })
        },
        */
  },

2.上傳圖片、圖片預覽、刪除圖片

上傳圖片

手賬小程式當然也要有記錄圖片和文字的功能,這裡先說一下上傳圖片的功能。
首先,通過小程式·雲開發的index介面我們不難發現有一個上傳圖片的功能,為了方便寫出預覽和刪除圖片的功能,這裡先對上傳圖片的程式碼做一些解釋:

        // 上傳圖片
        doUpload: function () {
        // 選擇圖片
        wx.chooseImage({
              count: 1,//一次性上傳的圖片的數量
              sizeType: ['compressed'],//指定是原圖還是縮圖,這裡是縮圖,預設兩者都有
              sourceType: ['album', 'camera'],//從相機或者相簿獲取圖片,預設兩者都有
              success: function (res) {//介面呼叫成功執行的函式
                    //顯示載入提示框
                    wx.showLoading({
                    title: '上傳中',
                    })
                    //
                    const filePath = res.tempFilePaths[0]//獲取上傳的圖片路徑,這裡是選擇圖片返回的臨時地址
    
                     // 上傳圖片
                     const cloudPath = 'my-image' + filePath.match(/\.[^.]+?$/)[0]//正則表示式獲取副檔名
                     wx.cloud.uploadFile({
                           cloudPath,//雲伺服器路徑
                           filePath,//圖片路徑
                           success: res => {
                                 console.log('[上傳檔案] 成功:', res)//在控制檯返回檔案上傳成功的資訊,可以用於後期在偵錯程式的Console中除錯
                                 //獲取圖片的檔案ID和雲檔案路徑
                                 app.globalData.fileID = res.fileID
                                 app.globalData.cloudPath = cloudPath
                                 app.globalData.imagePath = filePath
                                 

                                 wx.navigateTo({//跳轉到storageConsole.html頁面,用於圖片預覽等等
                                       url: '../storageConsole/storageConsole'
                                 })
                           },
                           fail: e => {//在控制檯返回上傳失敗的資訊
                                 console.error('[上傳檔案] 失敗:', e)
                                 wx.showToast({
                                 icon: 'none',
                                 title: '上傳失敗',
                           })
                           },
                           complete: () => {
                                 wx.hideLoading()//wx.hideLoading(Object object)用於隱藏 loading 提示框
                           }      
                     })

              },
              fail: e => {
                    console.error(e)//向除錯面板中列印 error 日誌
              }
        })
        },

圖片預覽

在上傳圖片的當前頁面進行圖片預覽,暫時不需要呼叫資料庫裡的圖片,廢話不多說,直接上程式碼解析吧

.js
  //.js
  previewImage: function(e){
        wx.previewImage({
              current: e.currentTarget.id, // 當前顯示圖片的http連結
              urls: this.data.files // 需要預覽的圖片http連結列表
        })
  }
.wxml
  //.wxml
  <view class="container">
        <block wx:for="{{files}}" wx:key="*this"><!--迴圈遍歷,顯示出全部的預覽圖片-->
              <view class="list-item" bindtap="previewImage" id="{{item}}"><!--點選觸發previewImage的函式-->
                    <image class="image1" src="{{item}}"mode="aspectFill" >//
                          <icon type='cancel' class="image_remove"  catchtap="removeImage"></icon>
                    </image>
              </view>
        </block>
  </view>

刪除圖片

.js
  //刪除
  removeImage(e) {
        var files = this.data.files;
        var index = e.currentTarget.dataset.index;
        files.splice(index, 1);//splice() 方法向/從陣列中新增/刪除專案,然後返回被刪除的專案。
        this.setData({
              files: files//替換改變後的圖片組
        });
  },

currentTarget是事件繫結的當前元件。
dataset在元件節點中可以附加一些自定義資料。這樣,在事件中可以獲取這些自定義的節點資料,用於事件的邏輯處理。
setData函式主要用於將邏輯層資料傳送到檢視層

.html
  <icon type='cancel' class="image_remove"  catchtap="removeImage"></icon>

bindtap和 catchtap都屬於點選事件,繫結之後,點選元件是可以觸發這個函式的。
而bindtap在子元素繫結事件後,執行的時候會觸發父元素上繫結的bingtap事件,catchtap則不會冒泡到父元素上。