1、模板
如果相同的wxml代碼可能在不同的頁面重復使用,ctrl+c配合ctrl+v的方式,后期維護起來未免也太麻煩了。微信提供了“模板”,可以在模板中定義代碼片段,然后在不同的地方調用。
使用 <template> 對代碼進行模板定義,並使用name屬性為模板進行命名,如:
<template name="msgItem">
<view>
<text> {{index}}: {{msg}} </text>
<text> Time: {{time}} </text>
</view>
</template>
6
1
<template name="msgItem">
2
<view>
3
<text> {{index}}: {{msg}} </text>
4
<text> Time: {{time}} </text>
5
</view>
6
</template>
而在需要使用模板的地方,首先需要
引用模板文件,通過import關鍵字,可以在文件中使用引用文件中定義的template,如:
<import src="item.wxml"/>
1
1
<import src="item.wxml"/>
而使用的話,同樣是
<template> ,但使用其
is 屬性進行聲明使用,並將模板需要的數據傳入。如:
<import src="item.wxml"/>
<template is="msgItem" data="{{...item}}"/>
1
<import src="item.wxml"/>
2
<template is="msgItem" data="{{...item}}"/>
來實際操作一下,我們接着之前的章節,現在把welcome頁面中的代碼片段 <text>Welcome,{{nickname}}!{{number}}</text> 抽離為模板:
- 在pages文件夾下,新建文件夾template,並新建一個wxml文件命名為welcome-template.wxml
- 按照模板的定義方式,定義模板內容
然后,我們到welcome.wxml中引用name為welcome的模板:
注:這里的
... 是wxml中提供的一個擴展運算符,表示將一個對象展開,這樣一來在模板中本需要使用pageData.nickname的形式,現在只需要寫nickname即可。
可以看到,這里傳入的數據參數名為pageData,那么我們在welcome.js中的data也需要修改為json對象的形式:
我們看到效果和之前直接寫是一樣的:
2、模塊化
在微信小程序中,可以將一些公共的代碼抽離為一個單獨的js文件,作為一個模塊,而在其它需要使用的頁面,對該js文件進行引用。
而模塊的內容只能通過 module.exports 來對外暴露接口。而在需要使用的地方,使用關鍵字 require(path) 進行引入。
值得注意的是,因為代碼執行順序的緣故,盡量把module.exports放在文件的最后。自己踩過的一個坑就是,曾把它放在第一行,結果引出的變量為undefined。
之前我們的變量nickname是寫在welcome.js中的,現在我們把它抽離到其他js文件中,來示范一下“模塊化”。
首先建立一個根目錄命名為“modules”,在其下新建一個js文件data.js:
在js中可以定義變量或者函數,我們簡單寫一下,然后使用 module.exports 來暴露接口以供外界調用:
原來在welcome.js的onLoad函數中,我們的nickname是直接賦值的字符串,現在我們要引用模塊文件data.js中的nickname,或者getNickname:
編譯一下查看效果,妥妥的:
