支付寶小程序框架 AXML·模板

2020-09-18 10:28 更新

axml 提供模板 template,可以在模板中定義代碼片段,然后在不同地方調用。 建議使用 template 方式引入模板片段,因為 template 會指定其作用域,只使用 data 傳入的數據,如果 template 的 data 沒有改變,該片段 UI 不會重新渲染。

定義模板

使用 name 屬性申明模板名,然后在 <template/> 內定義代碼片段。

<!--
  index: int
  msg: string
  time: string
-->
<template name="msgItem">
  <view>
    <text> {{index}}: {{msg}} </text>
    <text> Time: {{time}} </text>
  </view>
</template>

使用模板

使用 is 屬性,聲明需要的模板,然后將需要的 data 傳入,比如:

<template is="msgItem" data="{{...item}}"/>
Page({
  data: {
    item: {
      index: 0,
      msg: 'this is a template',
      time: '2019-04-19',
    },
  },
});

is 屬性可以使用 Mustache 語法,來動態(tài)決定具體渲染哪個模板。

<template name="odd">
  <view> odd </view>
</template>
<template name="even">
  <view> even </view>
</template>


<block a:for="{{[1, 2, 3, 4, 5]}}">
    <template is="{{item % 2 == 0 ? 'even' : 'odd'}}"/>
</block>

模板作用域

模板有其作用域,只能使用 data 傳入的數據。除了直接由 data 傳入數據外,也可以通過 onXX 事件綁定頁面邏輯進行函數處理。如下代碼所示:

<!-- templ.axml -->
<template name="msgItem">
    <view>
        <view>
            <text> {{index}}: {{msg}} </text>
            <text> Time: {{time}} </text>
        </view>
        <button onTap="onClickButton">onTap</button>
    </view>
</template>
<!-- index.axml -->
<import src="./templ.axml"/>
<template is="msgItem" data="{{...item}}"/>
Page({
  data: {
    item: {
      index: 0,
      msg: 'this is a template',
      time: '2019-04-22'
    }
  },
  onClickButton(e) {
    console.log('button clicked', e)
  },
});
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號