小程式前端

封亞飛發表於2020-07-21

封亞飛---64761294---全棧攻城獅養成


python+小程式開發全棧

1 前端開發

1.1全域性配置

app.json檔案用於小程式全域性配置

app.json

json不可註釋

  • pages:頁面結構列表

    • 示例:

       "pages": [
          "pages/index/index",
          "pages/logs/index"
        ]
      
    • pages會表明小程式全域性所有頁面路徑資訊

  • window:對頂部窗體資訊的配置

    • 窗體名引數 "navigationBarTitleText": "Demo"
      
    • 窗體背景色引數 "navigationBarBackgroundColor": "#000000" 僅支援
      HexColor
      
    • 窗體標題顏色引數 ”navigationBarTextStyle“:”white“ 僅支援stringColor
      
  • tabBar:對底部多頁面導航的配置

    • color:tab文字預設顏色,僅支援HexColor

    • selectedColor:tab選中後顏色,僅支援HexColor

    • list:tab列表,最少2個,最多5個tab(以下所用icon尺寸:81px*81px,<=40kb,不支援網路圖片)

      • pagePath引數:頁面路徑

      • text:tab上按鈕文字

      • iconPath:按鈕icon路徑

      • selectedIconPath:選中後的圖片路徑

1.2 元件

1.2.1 text元件

編寫文字資訊,類似於HTTP中的span

1.2.2 view元件

容器,類似於HTTP中的div

1.2.3 image元件

圖片顯示元件

1.3 頁面flex佈局

一種非常方便的通用佈局方式

1.3.1 flex-direction

規定主軸方向

  • column:主軸豎直

  • row:主軸水平

1.3.2 justify-content

規定主軸方向上的排列方式

  • flex-start/end

  • center

  • space-around

  • space-between

1.3.3 align-items

規定副軸方向排列方式

  • flex-start/end
  • center
  • space-around
  • space-between

1.3.4 示例:

display:flex;					flex佈局
flex-direction:row;				規定主軸方向:row/column
justify-content:space-around;	元素在主軸方向上的排列方式:flex-start/end/space-around/space-between
align-items:center;				元素在副軸方向上的排列方式

1.4 樣式

1.4.1 畫素

  • px:畫素點
  • rpx:畫素,針對不同的裝置自動適配,保證小程式前端相容性
    • 規定裝置的最大寬度為750rpx;

1.5 獲取使用者資訊

1.5.1 資料繫結

  • 針對於前端要顯示的變數資訊,我們可以藉助於使用{{變數名}}在前端wxml中作為佔位符·
  • 在js中的data字典內定義“變數名:資料”
    <image class='img' src="{{pic_head}}"></image>
    <button class='bu'>{{name}}</button>

1.5.2 資料修改

  • 對於資料要根據實時情況發生變化
  • js中有一個this.setData()方法,引數是一個字典物件,用於對this中的data進行修改
	  data: {
    name:"",
    pic_head:"",
  },
      changeData:function(){
     this.setData({name:"core",pic_head:"/images/test.png"})
  },

1.5.3 點選獲取使用者資訊

1.5.3.1 首先在button元件上繫結點選事件
<button open-type='getUserInfo' bindgetuserinfo="getUser">點選獲取資訊 ></buttton>

bindtap方法是wxml中用於給元件繫結點選事件的方法,他的value是定義在js中的函式

1.5.3.2 然後在js中定義bindtap的value函式
  // 獲取使用者資訊
  getUser:function(){
    console.log('sdf');
    var that = this
    //呼叫wx介面獲取當前使用者資訊
    wx.getUserInfo({
      success:function(res){
        //呼叫成功時觸發
        console.log(res.userInfo);
        var userInfo =res.userInfo
        that.setData({name:userInfo.nickName,pic_head:userInfo.avatarUrl})
      },
      fail:function(res){
        //呼叫失敗時觸發
      }
    })
  },

微信提供了一系列的介面,其中wx.getUserInfo()方法用於獲取當前使用者的資訊。、

這裡藉助除錯工具console.log()方法載入一下獲取到的結果res

  • console.log(res) 在控制檯上列印獲取到的使用者資訊json

  • 根據控制檯輸出的json可以看到

    • {nickName: "core", gender: 1, language: "zh_CN", city: "Zhengzhou", province: "Henan", …}
      avatarUrl: "https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKJlFEiaUkR0MzXbUGicOQOu3Wic1zRVj7nnicPSaA9Uu5fZnUCH6dGnk6ibibfZ9BX4ics6deallDOkjAMA/132"
      city: "Zhengzhou"
      country: "China"
      gender: 1
      language: "zh_CN"
      nickName: "core"
      province: "Henan"
      __proto__: Object·····
      
      //這是userInfo
      
  • res中的userInfo中儲存了使用者資訊,userInfo中的nickName儲存使用者暱稱,avatarUrl儲存使用者頭像。

獲取到userInfo之後,使用js的this.setData方法來修改data從而改變wxml。

由於在當前wx.getUserInfo作用域內,this是指代當前的getUserInfo物件,而不是js檔案的this。所以我們需要在wx.getUserInfo呼叫之前宣告一個that變數,讓他指代js的this。

var that = this

然後在wx.getUserInfo.success中使用以下語句

that.setData({name:userInfo.nickName,pic_head:userInfo.avatarUrl})

1.6 獲取使用者位置資訊

這裡介紹一個新的wx介面:wx.chooseLocation()

具體用法:

  • 可以將此功能加入1.5的“點選獲取資訊”的button中

    • <button class='bu' open-type="getUserInfo" bindgetuserinfo="getUser" bindtap='getLocalpath'>點選獲取資訊 ></button>
      
      • 在button控制元件中加入點選事件bindtap='getLocalpath'

      • 然後在js中定義getLocalpath函式

        • // 獲取使用者位置
          getLocalpath:function(){
            var that = this
            console.log(wx.chooseLocation({
              success: function(res) {
                that.setData({localpath:res.address})
              },
            }))
          },
          

  • 關於位置資訊顯示的,參考之前的資料繫結與資料修改即可。這裡不再贅述。

1.7 for指令

1.7.1 列表物件迴圈展示

對後端傳來的資料進行迴圈展示

<view wx:for='{{dataList}}'>{{idx}}{{x}}</view>

這裡的wx:for是wxml提供的一個迴圈指令,它可以將其value中的物件依次遍歷

  • 可類比於python的for迴圈
    • for item in valueList:
      • print(item)
      • print(index(item))
<view wx:for='{{dataList}}' wx:for-index="idx" wx:for-item="x">{{idx}}{{x}}</view>

這裡相對於上一條語句,使用wx:for-index=“idx”將index賦予別名idx

1.7.2 字典物件迴圈展示

<!-- 生成格式:key-value -->
<view wx:for="{{userInfo}}">{{index}}-{{item}}</view>

生成格式

key-value

1.8上傳圖片案例

圖片上傳案例

  • 使用for指令迴圈展示圖片列表

    • <view bindtap="uploadImage">請上傳圖片</view>
      <view class='container'>
        <image wx:for="{{imageList}}" src="{{item}}"></image>
      </view>
      
  • 用wx.chooseImage()方法API上傳圖片,並建立uploadImage函式

    • // 上傳圖片函式
      uploadImage:function(){
        var that = this
        wx.chooseImage({
          count:9,
          sizeType:['original','compressed'],
          sourceType:['album','camera'],
          success: function(res) {
            
            // 覆蓋列表
            // that.setData({imageList:res.tempFilePaths}); 
            // 列表尾插
            that.setData({
              imageList:that.data.imageList.concat(res.tempFilePaths)
            });
          },
        })
      },
      
    • 上傳後會獲取到一個res

    • console.log(res)後會得到一個字典,字典中包含tempFilePaths陣列,包含已上傳的http地址

  • 然後將res.tempFilePaths覆蓋或拼接到預設的圖片列表資料中去

    • 覆蓋方式:

      • that.setData({imageList:res.tempFilePaths}); 
        
    • 拼接方式

      • JavaScript中的列表concat方法,用於拼接兩個列表物件

        1. that.setData({
                    imageList:that.data.imageList.concat(res.tempFilePaths)
                  });
          

1.8.1 前端wxml頁面

<!--pages/publish/publish.wxml-->
<view bindtap="uploadImage">請上傳圖片</view>
<view class='container'>
  <image wx:for="{{imageList}}" src="{{item}}"></image>
</view>

1.8.2 前端樣式wxss頁面

.container image{
  width: 200rpx;
  height: 200rpx;
  padding:5rpx;
}

1.8.3 後端js邏輯頁面

// pages/publish/publish.js
Page({

  /**
   * 頁面的初始資料
   */
  data: {
    imageList: ["/images/test_head.jpg", "/images/test_head.jpg"]

  },

  // 上傳圖片函式
  uploadImage:function(){
    var that = this
    wx.chooseImage({
      count:9,
      sizeType:['original','compressed'],
      sourceType:['album','camera'],
      success: function(res) {
        
        // 覆蓋列表
        // that.setData({imageList:res.tempFilePaths}); 
        // 列表尾插
        that.setData({
          imageList:that.data.imageList.concat(res.tempFilePaths)
        });
      },
    })
  },
  /**
   * 生命週期函式--監聽頁面載入
   */
  onLoad: function (options) {

  },

  /**
   * 生命週期函式--監聽頁面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命週期函式--監聽頁面顯示
   */
  onShow: function () {

  },

  /**
   * 生命週期函式--監聽頁面隱藏
   */
  onHide: function () {

  },

  /**
   * 生命週期函式--監聽頁面解除安裝
   */
  onUnload: function () {

  },

  /**
   * 頁面相關事件處理函式--監聽使用者下拉動作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 頁面上拉觸底事件的處理函式
   */
  onReachBottom: function () {

  },

  /**
   * 使用者點選右上角分享
   */
  onShareAppMessage: function () {

  }
})

1.8.4 json檔案

{
  "usingComponents": {}
}

相關文章