微信小程式入門五: wxml檔案引用、模版、生命週期
例項內容
- wxml檔案引用(include、import)
- 模版
- 小程式生命週期
例項一: include
方式引用header.wxml
檔案
檔案引用對於程式碼的重用非常重要,例如在web開發中我們可以將公用的header
部分和footer
等部分進行提取,然後在需要的地方進行引用。
微信小程式裡面,是包含引用功能的——include
、import
。這兩個引用檔案的標籤,使用基本差不多,這裡先說一下include
。
微信中的檢視檔案引用,引用過來的都是沒有渲染的,基本類似於直接將引用過來的檔案複製到引用位置,所以我們需要重新對其渲染。
例項說明
這裡將預設建立的使用者頭像資訊提取出到header.wxml
中,做為頭部引用,分別由index2.wxml
和index3.wxml
引用,引用方式為include
。
例項程式碼
在pages
中建立common/header.wxml
從index.wxml
中將系統預設建立的使用者資訊結構複製到header.wxml
中。
header.wxml
程式碼:
<!--pages/common/header.wxml-->
<view bindtap="bindViewTap" class="userinfo">
<image class ="userinfo-avatar" src="{{userInfo.avatarUrl}}" background-size="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</view>
因為兩個頁面都要包含header.wxml
,所以樣式檔案就不重複寫了,這裡直接將樣式拷貝到app.wxss
。
app.wxss
程式碼:
/**app.wxss**/
.userinfo {
display: flex;
flex-direction : column;
align-items: center;
}
.userinfo-avatar {
width: 128rpx;
height: 128rpx;
margin: 20rpx;
border-radius: 50%;
}
.userinfo-nickname {
color: #aaa;
}
建立index/index2
和index/index3
index2.wxml
內容:
<!--pages/index/index2.wxml-->
<view class="container">
<include src="../common/header.wxml" />
<view class="myBtn">
<button type="primary" bindtap="goIndex3">進入index3</button>
</view>
</view>
因為index2.wxml
和index3.wxml
都需要userInfo
資料,所以這邊在index2
獲取到資料後,使用本地儲存進行儲存,index3.wxml
讀取本地儲存。
index2.js
程式碼:
// pages/index/index2.js
var app = getApp()
Page({
data: {
userInfo: {},
},
goIndex3:function(){
wx.navigateTo({
url: 'index3'
})
},
onLoad: function () {
console.log('onLoad')
var that = this
app.getUserInfo(function (userInfo) {
that.setData({
userInfo: userInfo
})
//本地儲存
wx.setStorageSync('userInfo', userInfo)
})
}
})
index3.wxml
程式碼:
<!--pages/index/index3.wxml-->
<view class="container">
<include src="../common/header.wxml" />
<text>pages/index/index3.wxml</text>
</view>
index3.js
程式碼:
// pages/index/index3.js
Page({
data:{
userInfo: {},
},
onLoad:function(options){
this.setData({
userInfo: wx.getStorageSync('userInfo')
})
},
})
例項效果
例項二: import
方式引用footer.wxml
檔案
這個例項使用import
來引用檔案,import
比include
要強大的多,待會我再對於這兩都進行一下對比。
import
引用方式涉及到了微信的模版(template),這裡先說一下template
。
微信檢視模版(template)
template
也是寫在.wxml
中,然後使用<template>...</template>
標記指定模版資訊,模版下定義:
<template name="msgItem">
檢視程式碼...
</template>
使用name
屬性,作為模板的名字。
使用模版:
<template is="msgItem" data="{{...item}}"/>
data
為向模版傳入的資料。
例項說明
使用模版的方式建立footer
檢視程式碼片,然後用import
和template
進行程式碼的呼叫。
例項程式碼
建立footer.wxml
footer.wxml
程式碼:
index2.wxml
程式碼:
例項效果
例項三: 小程式退出時清除本地資料
這裡涉及到了小程式的生命週期問題,可以類比一下安卓生命週期,小程式的生命週期在app.js
中進行定義:
屬性 | 型別 | 描述 | 觸發時機 |
---|---|---|---|
onLaunch | Function | 生命週期函式–監聽小程式初始化 | 當小程式初始化完成時,會觸發 onLaunch(全域性只觸發一次) |
onShow | Function | 生命週期函式–監聽小程式顯示 | 當小程式啟動,或從後臺進入前臺顯示,會觸發 onShow |
onHide | Function | 生命週期函式–監聽小程式隱藏 | 當小程式從前臺進入後臺,會觸發 onHide |
onError | Function | 錯誤監聽函式 | 當小程式發生指令碼錯誤,或者 api 呼叫失敗時,會觸發 onError 並帶上錯誤資訊 |
page
生命週期:
屬性 | 型別 | 描述 |
---|---|---|
onLoad | Function | 生命週期函式–監聽頁面載入 |
onReady | Function | 生命週期函式–監聽頁面初次渲染完成 |
onShow | Function | 生命週期函式–監聽頁面顯示 |
onHide | Function | 生命週期函式–監聽頁面隱藏 |
onUnload | Function | 生命週期函式–監聽頁面解除安裝 |
這裡用到了onUnload
事件。
index2.js
程式碼:
include
與 import
import
可以在該檔案中使用目標檔案定義的template
include
可以將目標檔案除了<template/>
的整個程式碼引入,相當於是拷貝到include
位置
import的作用域
import
有作用域的概念,即只會import
目標檔案中定義的template
,而不會import
目標檔案import的template
。
如:C import B,B import A,在C中可以使用B定義的template,在B中可以使用A定義的template,但是C不能使用A定義的template
部落格名稱:王樂平部落格
部落格地址:http://blog.lepingde.com
CSDN部落格地址:http://blog.csdn.net/lecepin