前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小程序 | 8-wxml

小程序 | 8-wxml

作者头像
CnPeng
发布2021-05-17 15:14:43
6970
发布2021-05-17 15:14:43
举报
文章被收录于专栏:CnPengDevCnPengDev

介绍 wxml 中的相关语法内容。

wxml 基本格式:

  • 类似 html 代码:比如,可以写成单标签也可以写成双标签
  • 必须有严格的闭合:没有闭合会导致编译报错
  • 大小写敏感:class 和 Class 是不同的属性

1. {{}}- Mustache 语法

mustache.wxml:

代码语言:javascript
复制
<!--pages/mustache/mustache.wxml-->

<!-- 1- 绑定内容 -->
<view>{{name}}</view>
<view>{{firstName}} {{lastName}}</view>
<view>{{firstName + ' ' +lastName }}</view>
<view>{{age >= 18 ? '成年人':'未成年人'}}</view>
<view>{{nowTime}}</view>

<!-- 2-绑定属性 -->
<button size="mini" bindtap="onSwitchColor"> 点击切换下面文本的颜色 </button>
<!-- 如果被 isClick 为 true 启用 clicked 样式, 为 false 不启用-->
<view class='box {{isClick ? "clicked":""}}'>点击上面的按钮改变这个文本颜色</view>

mustache.js

代码语言:javascript
复制
// pages/mustache/mustache.js
Page({
  data: {
    name: "张三",
    firstName: "张",
    lastName: "三",
    age: 20,
    // 当前时间
    nowTime: new Date().toLocaleString(),
    // 是否被点击的标识
    isClick: false
  },

  onLoad() {
    // 设置定时器,每秒钟执行一次
    setInterval(() => {
      this.setData({
        nowTime: new Date().toLocaleString()
      })
    }, 1000)
  },

  onSwitchColor() {
    // 注意,设置属性时使用 this.setData, 引用时使用 this.data.
    this.setData({
      isClick: !this.data.isClick
    })
  }
})

mustache.wxss:

代码语言:javascript
复制
/* pages/mustache/mustache.wxss */
.box{
  font-size: 18px;
}

.clicked{
  color: red;
}

2. 条件/逻辑判断

包括 wx:if、wx:elif、wx:else . 当条件结果为 true 时显示组件,false 不显示组件。

2.1 条件判断

condition.wxml:

代码语言:javascript
复制
<!--pages/condition/condition.wxml-->

<!-- 补充:地图的使用 -->
<map class="map" longitude="116.33" latitude="39.92" style="width:100% ;height:350rpx">
</map>

<!-- 1-wx:if -->
<button bindtap="switchShow1" size="mini">点击切换下面 view 的显示</button>
<view wx:if="{{isShow}}">条件判断</view>

<!-- 2-wx:else、wx:elif -->
<button bindtap="changeScore" size="mini">点击修改下面的得分</button>
<view wx:if="{{score>=90}}">成绩 >=90</view>
<view wx:elif="{{score>=60}}">成绩 >=60</view>
<view wx:else>成绩不及格</view>

condition.js:

代码语言:javascript
复制
// pages/condition/condition.js
Page({
  data: {
    isShow: true,
    score:50
  },

  switchShow1() {
    this.setData({
      isShow: !this.data.isShow
    })
  },

  changeScore(){
      this.setData({
        score:this.data.score >= 100 ? this.data.score-25 : this.data.score+10
      })
  }
})

2.2 hidden 属性

hidden 是所有组件都默认拥有的属性,true 隐藏,false 显示。

wx:if 和 hidden 都可以实现组件的显示和隐藏。区别主要在于隐藏时的状态:

  • hidden 隐藏组件时,组件依然在 xml 中存储,只是没有渲染出来。
  • wx:if 隐藏组件时,xml 中就不会添加该组件

3. 列表渲染

3.1 wx:for

代码语言:javascript
复制
<!--pages/for/for.wxml-->
<!-- 1-1-遍历数组 -->
<view wx:for='{{["abc","cba","bca"]}}'>{{item}}、{{index}}</view>
<!-- 1-2-遍历字符串,被遍历的内容没有使用 {{}} -->
<view wx:for="abc">{{item}}、{{index}}</view>
<!-- 1-3-遍历数字 -->
<view wx:for="{{5}}">{{item}}、{{index}}</view>

3.2 block 标签

在某些情况下,我们需要使用 wx:if 或 wx:for 时,可能需要包裹一组组件标签,当我们需要对这一组组件标签仅想整体的操作时,就可以使用 block 标签。

<block></block> 并不是一个组件,仅是一个包装元素用的标签,不会再页面中做任何渲染,只接受控制属性——如 wx:if、wx:for

代码语言:javascript
复制
<block wx:if="{{isShow}}">
  <button>按钮1-block</button>
  <button>按钮1-block</button>
  <text>文本1-block</text>
</block>

在不使用 block 时,也可以使用下面的方式实现对一组组件的控制:

代码语言:javascript
复制
<view wx:if="{{isShow}}">
  <button>按钮1</button>
  <button>按钮1</button>
  <text>文本1</text>
</view>

但是,block 不是一个组件,仅是一个特殊的标签,所以性能上会比 view 包裹的方式高。

3.3 为默认的 item 和 index 改名

在 wx:for 循环时,会默认生成 item 和 index 。但是,如果产生了嵌套(多层遍历)时,就有必要对 item 和 index 进行重命名,如下:

代码语言:javascript
复制
<!-- 2-为默认的 item 、index 改名 -->
<view wx:for='{{["abc","cba","bca"]}}' wx:for-item="word" wx:for-index="i">{{word}}、{{i}}</view>

<!-- 二维数组 -->
<block wx:for='{{[[1,2,3],[4,5,6],[7,8,9]]}}'>
    <block wx:for="{{item}}" wx:for-item="num" wx:for-index="i">
        <view>{{num}}</view>
    </block>
</block>

注意:改名时,名字中不要用中划线。

3.4 wx:key

我们在使用 wx:for 时,在控制台会报出如下错误信息:

提示说,我们要设置 wx:key 从而提升性能——主要提升的是小程序底层的虚拟 DOM 的性能。

未使用 key 时,所有数据和视图都会发生变化;使用 key 之后,只有发生变化的数据才会更新对应的视图

key 必须是能对数据进行唯一标识的内容。

4. 模板

10.4.1 模板的基本使用

wxml 提供模板(template),可以在模板中定义代码片段,在不同的地方调用。(这是 wxml 代码复用的一种机制)。使用 name 属性作为模板的名字,然后在 <template/> 节点中定义代码片段。

模板中包裹的内容在被使用前,是不会进行任何渲染的。

定义并使用模板(示例是在 wxml 中定义并使用):

代码语言:javascript
复制
<!-- 1-1-定义模板 -->
<template name="contentItem">
  <button>{{btnText}}</button>
  <view>{{viewText}}</view>
</template>

<!-- 1-2-使用模板 -->
<template is="contentItem" data="{{btnText:'按钮文本1',viewText:'view文本1'}}"/>
<template is="contentItem" data="{{btnText:'按钮文本2',viewText:'view文本2'}}"/>

效果如下:

4.2 import 导入模板

将模板内容抽取到公共的 wxml 文件中,然后使用方导入该文件并使用——导入时支持相对路径和绝对路径。主要用于导入模板内容。

定义模板:

代码语言:javascript
复制
<!-- 1-1-定义模板 -->
<template name="contentItem">
  <button>{{btnText}}</button>
  <view>{{viewText}}</view>
</template>

导入并使用:

代码语言:javascript
复制
<!-- 导入绝对路径 -->
<!-- <import src="/wxml/template.wxml"/> -->
<!-- 导入相对路径 -->
<import src="../../wxml/template.wxml"/>

<!-- 1-2-使用模板 -->
<template is="contentItem" data="{{btnText:'按钮文本1',viewText:'view文本1'}}"/>
<template is="contentItem" data="{{btnText:'按钮文本2',viewText:'view文本2'}}"/>

模板不能循环导入:即不能 A 中导入 B,B 中又导入 A .

4.3 include 引入

include 可以将目标文件中除了 <template/><wxs/> 外的整个代码引入,相当于是拷贝到 include 位置。

include 支持嵌套引入,引入方式同 import——支持相对路径和绝对路径。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CnPeng 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. {{}}- Mustache 语法
  • 2. 条件/逻辑判断
    • 2.1 条件判断
      • 2.2 hidden 属性
      • 3. 列表渲染
        • 3.1 wx:for
          • 3.2 block 标签
            • 3.3 为默认的 item 和 index 改名
              • 3.4 wx:key
              • 4. 模板
              • 10.4.1 模板的基本使用
                • 4.2 import 导入模板
                  • 4.3 include 引入
                  相关产品与服务
                  云开发 CloudBase
                  云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档