微信小程式 基礎語法
阿新 • • 發佈:2019-02-20
微信小程式 基礎語法
.wxml檔案中
列表渲染
<view wx:for="{{array}}">{{item}}</view>
如果沒有寫wx:key,這會報警告Now you can provide attr “wx:key” for a “wx:for” to improve performance.
- wx:key 的值以兩種形式提供 :
- 字串,代表在 for 迴圈的 array 中 item 的某個 property,該 property 的值需要是列表中唯一的字串或數字,且不能動態改變。
- 保留關鍵字 *this 代表在 for 迴圈中的 item 本身,這種表示需要 item 本身是一個唯一的字串或者數字,如:當資料改變觸發渲染層重新渲染的時候,會校正帶有 key 的元件,框架會確保他們被重新排序,而不是重新建立,以確保使元件保持自身的狀態,並且提高列表渲染時的效率。
如不提供wx:key
注意區分:
- 在元件上使用wx:for控制屬性繫結一個數組,即可使用陣列中各項的資料重複渲染該元件。wx:for和wx:for-items作用一樣
- 預設陣列的當前的下標變數名預設為index,陣列當前項的變數名預設為item。
- 使用wx:for-item 可以指定陣列當前元素的變數名。起別名,預設是 item。使用wx:for-index 可以指定陣列當前下標的變數名
- wx:key 如果列表中專案的位置會動態改變或有新的專案新增到列表中,並且希望列表中的專案保持自己的特徵和狀態(如 中的輸入內容, 的選中狀態),需要使用 wx:key 來指定列表中專案的唯一的識別符號。
條件渲染
<view wx:if="{{logged}}">登入</view>
<view wx:else>未登入</view>
這裡需要注意一下:如果好幾個判斷中間是 elif
wx:if,wx:elif,wx:else
模板渲染
- 定義模板
使用 template 標籤進行定義一個標籤<template></template>
。
使用 name 屬性,作為模板的名字。 - 使用模板
使用 is 屬性,宣告需要的使用的模板,值是定義模板的name 屬性值。
使用 data屬性,將資料傳入模板
<template name="staffName">
<view>
FirstName: {{firstName}}, LastName: {{lastName}}
</view>
</template>
<template is="staffName" data="{{...staffA}}"></template>
<template is="staffName" data="{{...staffB}}"></template>
<template is="staffName" data="{{...staffC}}"></template>
例子2
<template name="odd" data="{{item}}">
<view>{{item}} is odd </view>
</template>
<template name="even" data="{{item}}">
<view>{{item}} is even </view>
</template>
<block wx:for="{{[1, 2, 3, 4, 5]}}" wx:for-item="item">
<template is="{{item % 2 == 0 ? 'even' : 'odd'}}" data="{{item}}"/>
</block>
事件-這裡以點選事件為例
<view bindtap="push">跳轉頁面</view>
.js 檔案中
Page({
data: {
logged: false,
message:'Hello Mina!',
array:[1,2,3,4,5,6],
staffA: { firstName: 'Hulk', lastName: 'Hu' },
staffB: { firstName: 'Shang', lastName: 'You' },
staffC: { firstName: 'Gideon', lastName: 'Lin' }
},
push:function(){
wx.navigateTo({
url: '../userInfo/userInfo',
})
}
引用:import和include引用方式
如果要在index.wxml 裡面要引用 demo.wxml 中定義的模板,則需要引入 demo.wxml檔案
<import src="demo.wxml"/>
這裡需要注意的是import的作用域:只會import目標檔案中定義的template,而不會import目標檔案import的template。和 iOS 中的 import 不一樣,不能繼承。
include
include可以將目標檔案除了的整個程式碼引入,相當於是拷貝到include位置
倒計時
以倒計時天數為例:
首先在 js 檔案的 data 中定義
data: {
time_high: ‘2018-06-06’
}
倒計時方法
// 倒計時
count_down: function () {
var that = this;
setInterval(function () {
var curDate = util.formatTime(new Date);
console.log("curDate-----------", curDate);
var time_high = util.formatTime(new Date(that.data.time_high));
console.log(time_high);
// 兩個時間相差的秒數
var seconds = (Date.parse(time_high) - Date.parse(curDate)) / 1000;
var days = seconds / (3600 * 24);
var hours = parseInt((seconds - parseInt(days) * 3600 * 24) / 3600);
var minutes = parseInt((seconds - parseInt(days) * 3600 * 24 - parseInt(hours) * 3600) / 60);
var secs = parseInt((seconds - parseInt(days) * 3600 * 24 - parseInt(hours) * 3600 - parseInt(minutes) * 60))
console.log("secs:", secs);
if (hours.toString().length <= 1) {
hours = '0' + hours;
}
if (minutes.toString().length <= 1) {
minutes = '0' + minutes;
}
if (secs.toString().length <= 1) {
secs = '0' + seconds;
}
var timeString = hours + '小時' + minutes + '分' + secs + '秒'
days = parseInt(days);
that.setData({
days: days,
timeString: timeString
});
}.bind(this), 1000);
},
模組
.wxs檔案或者<wxs>