微信小程序2頁面繪制和數據綁定

前言

上一章大體介紹了微信小程序的配置頁面,這篇文章主要講下怎么繪制一個頁面,以及數據的交互

正式開始

首先新建一個包main,然后在main包里創建page-main,如下圖所示


創建page-main

創建后會生成4個文件


創建后
main.js

這個文件主要是實現頁面的邏輯文件,日后把網絡請求,數據交互,等等的業務邏輯或代碼邏輯可以放在這個文件里,文件語法同js相似,微信美名其曰:WeiXin Script
打開該文件會發現系統已經幫忙創建好幾個方法

// pages/main/main.js
Page({

  /**
   * 頁面的初始數據
   */
  data: {
  
  },

  /**
   * 生命周期函數--監聽頁面加載
   */
  onLoad: function (options) {
  
  },

  /**
   * 生命周期函數--監聽頁面初次渲染完成
   */
  onReady: function () {
  
  },

  /**
   * 生命周期函數--監聽頁面顯示
   */
  onShow: function () {
  
  },

  /**
   * 生命周期函數--監聽頁面隱藏
   */
  onHide: function () {
  
  },

  /**
   * 生命周期函數--監聽頁面卸載
   */
  onUnload: function () {
  
  },

  /**
   * 頁面相關事件處理函數--監聽用戶下拉動作
   */
  onPullDownRefresh: function () {
  
  },

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

  /**
   * 用戶點擊右上角分享
   */
  onShareAppMessage: function () {
  
  }
})

其中Page({})字段代表頁面,同android的Activity,ios的UIViewController類似,該方法包含onLoad、onReady、onShow、onHide、onUnload五個生命周期

onPullDownRefresh,onReachBottom是整個頁面下拉刷新,上拉加載更多的接口回調,需要在json里配置 enablePullDownRefresh和onReachBottomDistance屬性。下面的json文件會講到。

data{}可以理解成微信官方提供的一個object,也可以理解成這個地方是初始化一些同頁面相關的全局變量。

wxjs變量和語法和js差不多,但是方法申明是方法名在前,function在后例如


onButtonClick :function(){
//do button onclick
},
doGetData(){
 //do net work
}

這里需要注意,由于page是個數組,所以方法和方法直接需要用逗號分隔,否則會報編譯錯誤。

main.json

這個是同包名同名文件的page下的頁面設置,比如我們這個頁面叫page.mian.main,page.main.main.json只作用在當前頁面下面,這個json文件和app的json比起來少了很多東西,只有幾個屬性

navigationBarBackgroundColor

導航欄背景色,作用如下圖


image.png
navigationBarTextStyle

導航欄標題顏色,僅支持 black/white


image.png

image.png
navigationBarTitleText

導航欄標題文字內容,就是當前頁面的標題


image.png
backgroundColor

頁面背景色,但是沒什么卵用


image.png

所以想改背景色的,可以通過app或者當前頁的wxss文件修改,附上代碼

Page{
  background: #ff0000;
  width: 100%;
  height: 100%;
}
image.png
backgroundTextStyle

下拉背景字體、loading 圖的樣式,僅支持 dark/light
這個只能在enablePullDownRefresh為true時使用,效果如下
由于白色背景看不到light效果,我設置成了紅色背景


image.png

image.png
enablePullDownRefresh

是否開啟下拉刷新,不開啟無下拉效果,開啟則會回調js里的enablePullDownRefresh方法

onReachBottomDistance

是否開啟加載更多,參數為滑動值,滑動值越大,滑到底部用戶上拉的距離越大,推薦小一些

disableScroll

當前頁是否可以滑動,只限制在本頁面。app設置無用


image.png

image.png

main.wxml

ui頁面,同html語言,沒有div,但是可以通過view來控制,默認從上而下,從左往右。
詳細就不講了,可以參考文檔

main.wxss

同css

數據綁定

如果js有數據,想在頁面上展示怎么辦呢?下面開始介紹數據的綁定,這種使用方法有點類似jsp的方式,首先附上代碼

main.js

Page({

  /**
   * 頁面的初始數據
   */
  data: {
  datas:"我就是個跑堂的"
  },

  /**
   * 
   * 生命周期函數--監聽頁面加載
   */
  onLoad: function (options) {
  
  }
})

main.wxml

<!--pages/main/main.wxml-->
<view >
{{datas}}
</view>

效果


image.png

也就是說,在data{}里面的值,直接可以通過 Mustache 語法,通過雙括號的形式,直接賦值到頁面上,下面介紹列表賦值方法
附上代碼
main.js

Page({

  /**
   * 頁面的初始數據
   */
  data: {
    datas: ["我就是個跑堂的1", "我就是個跑堂的2", "我就是個跑堂的3"]
  },

  /**
   * 
   * 生命周期函數--監聽頁面加載
   */
  onLoad: function (options) {
  
  }
})

main.wxml

<!--pages/main/main.wxml-->
<view wx:for="{{datas}}">
{{item}}
</view>

數組在wxml里的使用有點像html里的foreach
但需要注意的是item,在wxml語言里,通過wx:for指定的數組,會默認指定這個變量的名字為item,當然也可以手動修改,代碼如下

<view wx:for="{{datas}}" wx:for-item="me">
{{me}}
</view>

若數據為對象呢?同html使用一樣,使用變量名+“.”的形式
代碼如下
main.js

Page({

  /**
   * 頁面的初始數據
   */
  data: {
    datas: {
      avatar: "https://gss0.bdstatic.com/94o3dSag_xI4khGkpoWK1HF6hhy/baike/c0%3Dbaike150%2C5%2C5%2C150%2C50/sign=8cedf19b252eb938f86072a0b40bee50/b2de9c82d158ccbfb48b474013d8bc3eb1354191.jpg",
      name: "李逍遙",
      sex: "男",
      info: "李逍遙,后取道號“一貧”,系列單機游戲《仙劍奇俠傳》重要角色之一,是《仙劍奇俠傳》男主角,亦登場于《仙劍奇俠傳二》和《仙劍奇俠傳五》,在《仙劍奇俠傳五前傳》有所提及。原是一鄉下客棧店小二,天資聰穎,因一壺酒被酒劍仙傳授了蜀山仙劍派劍術,在仙靈島與趙靈兒相遇,自此經歷重重磨難成長為一代曠世奇俠。后出任蜀山掌門,取道號一貧,御劍行遍天下,行俠仗義、斬妖除魔。多年后因魔教之亂,故引咎卸職,成為蜀山七圣之一。而后雖心力交瘁,但仍竭力保護天下蒼生。"
    } 
  
},

  /**
   * 
   * 生命周期函數--監聽頁面加載
   */
  onLoad: function (options) {

  }
})

main.xml

<!--pages/main/main.wxml-->
<view>
  <view class='top'>
    <image class='avatar' src="{{datas.avatar}}" />
    <view class='top_right'>
      <view>
        姓名:{{datas.name}}
      </view>
      <view>
        性別:{{datas.sex}}
      </view>
    </view>
  </view>
  <view class='line'></view>

  <view class='info'>
    簡介:{{datas.info}}
  </view>
</view>

由于寫了一些樣式,附上樣式代碼
main.wxss

/* pages/main/main.wxss */

Page {
  padding: 20rpx;
  width: 100%;
  height: 100%;
}

.viewH {
  height: 400rpx;
}

.avatar {
  margin: 20rpx;
  height: 200rpx;
  width: 200rpx;
  border-radius: 150px;
  border: 1rpx solid #333;
}

.top {
  height: 240rpx;
  display: flex;
  flex-direction: row;
  align-items: center;
}

.top_right {
  margin-left: 50rpx;
}

.line {
  height: 2rpx;
  margin-top: 5rpx;
  margin-bottom: 5rpx;
  margin-left: 10rpx;
  margin-right: 10rpx;
  background: #ddd;
}

.info {
  padding: 20rpx;
  flex-wrap: wrap;
}

效果如下


image.png

現在就可以寫一些簡單的靜態界面了~

結尾

其實小程序的界面繪制和數據綁定很簡單,就是將數據定義在data里,然后通過{{}}的形式展示在界面上,還有很多種類的賦值沒有說到,可以看官方的文檔數據綁定

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容