wxml语法-声明和绑定数据

news2024/10/6 19:15:51

文章目录

  • 1、展示内容
    • 1.1、{{school}} 直接引用的是一个字符串或其他类型的简单值
      • 1.1.1、index.wxml
      • 1.1.2、index.js
    • 1.2、{{obj.name}} 引用的是一个对象中的特定属性值
      • 1.2.1、index.wxml
      • 1.2.2、index.js
  • 2、绑定属性值
    • 2.1、使用数据绑定的方式来动态设置元素的属性值
      • 2.1.1、index.wxml
      • 2.1.2、index.js
    • 2.2、根据页面数据的变化来控制复选框的选中状态
      • 2.2.1、index.wxml
      • 2.2.2、index.js
  • 3、在 {{}} 内部可以做一些简单的运算
    • 3.1、index.wxml
    • 3.2、index.js
  • 4、在双大括号写法内部,只能写表达式,不能写语句,也不能调用 js 的方法
      • 1. 条件渲染
        • 使用 `wx:if`
        • 使用 `hidden`
      • 2. 循环渲染
        • 遍历数组
        • 遍历对象
      • 3. 调用方法
        • 页面 WXML 文件 (`page.wxml`)
        • 页面 JS 文件 (`page.js`)
      • 完整示例
        • 页面 WXML 文件 (`page.wxml`)
        • 页面 JS 文件 (`page.js`)
      • 解释

小程序页面中使用的数据均需要在Page()方法的data对象中进行的data对象中进行声明定义
在将数据声明好以后,在WXML使用 Mustache 语法 ( 双大括号 {{}} ) 将变量包起来,从而将数据绑定

在 {{}} 内部可以做一些简单的运算,支持如下几种方式:

  1. 算数运算
  2. 三元运算
  3. 逻辑判断
  4. 其他…

注意事项:在 {{}} 语法中,只能写表达式,不能写语句,也不能调用 js 相关的方法

1、展示内容

1.1、{{school}} 直接引用的是一个字符串或其他类型的简单值

1.1.1、index.wxml

<view>{{school}}</view>

1.1.2、index.js

Page({
  data: {
    school: "北京大学"
  }
});

1.2、{{obj.name}} 引用的是一个对象中的特定属性值

1.2.1、index.wxml

<view>{{obj.name}}</view>

1.2.2、index.js

Page({
  data: {
    obj: {
      name: "张三"
    }
  }
});

2、绑定属性值

2.1、使用数据绑定的方式来动态设置元素的属性值

2.1.1、index.wxml

<!-- 绑定属性值,如果需要动态绑定一个变量,属性值也需要使用双大括号进行包裹 -->
<view id="{{id}}">绑定属性值</view>

2.1.2、index.js

Page({
  data: {
    id: '1'  // 这个值会被绑定到 <view> 元素的 id 属性
  }
});

在这里插入图片描述

2.2、根据页面数据的变化来控制复选框的选中状态

2.2.1、index.wxml

<!-- 如果属性值是布尔值,也需要使用双大括号进行包裹 -->
<checkbox checked="{{ isChecked }}"/>

2.2.2、index.js

Page({
  data: {
    isChecked: true  // 初始状态下,复选框是选中的
  },

  // 假设你有一个方法来改变 isChecked 的值
  toggleCheckbox: function() {
    this.setData({
      isChecked: !this.data.isChecked  // 反转选中状态
    });
  }
});

如果 isChecked 的值为 true,则复选框会被选中;如果为 false,则复选框不会被选中。

3、在 {{}} 内部可以做一些简单的运算

3.1、index.wxml

<!-- 算术运算符 -->
<view>{{id+1}}</view>
<view>{{id-1}}</view>

<!-- 三元运算 -->
<view>{{id===1?'等于':'不等于'}}</view>

<!-- 逻辑判断 -->
<view>{{id===1}}</view>

3.2、index.js

Page({
  data: {
    id: '1'  // 这个值会被绑定到 <view> 元素的 id 属性
  }
});

在这里插入图片描述

4、在双大括号写法内部,只能写表达式,不能写语句,也不能调用 js 的方法

<!-- 在双大括号写法内部,只能写表达式,不能写语句,也不能调用 js 的方法 -->
<view>{{if(id===1){}}}</view>
<view>{{for(const i=0;i<=10;i++){}}}</view>
<view>{{obj.name.toUpperCase()}}</view>

在微信小程序中,模板语法并不直接支持复杂的 JavaScript 语句,如 if 语句和 for 循环。这是因为微信小程序的 WXML 模板语言主要用于简单的数据绑定和条件渲染,而不是执行复杂的逻辑。不过,你可以通过一些间接的方法来实现类似的功能。

1. 条件渲染

对于条件渲染,你可以使用 wx:ifhidden 属性来实现类似于 if 语句的效果。

使用 wx:if
<view wx:if="{{id === 1}}">ID 等于 1</view>
<view wx:else>ID 不等于 1</view>
使用 hidden
<view hidden="{{id !== 1}}">ID 等于 1</view>
<view hidden="{{id === 1}}">ID 不等于 1</view>

2. 循环渲染

对于循环渲染,你可以使用 wx:for 来遍历数组或对象。

遍历数组
<view wx:for="{{items}}" wx:key="index">
  {{item}}
</view>
遍历对象
<view wx:for="{{obj}}" wx:key="key">
  {{key}}: {{obj[key]}}
</view>

3. 调用方法

对于复杂的逻辑处理,比如字符串转换,你可以在页面的 JS 文件中定义方法,然后在 WXML 中调用这些方法。

页面 WXML 文件 (page.wxml)
<view>{{getUpperCaseName(obj)}}</view>
页面 JS 文件 (page.js)
Page({
  data: {
    obj: {
      name: "张三"
    }
  },

  getUpperCaseName: function(obj) {
    return obj.name.toUpperCase();
  }
});

完整示例

假设你有一个页面,需要根据 id 的值显示不同的内容,并且需要遍历一个数组,最后将对象的名称转换为大写。

页面 WXML 文件 (page.wxml)
<!-- 条件渲染 -->
<view wx:if="{{id === 1}}">ID 等于 1</view>
<view wx:else>ID 不等于 1</view>

<!-- 循环渲染 -->
<view wx:for="{{items}}" wx:key="index">
  {{item}}
</view>

<!-- 调用方法 -->
<view>{{getUpperCaseName(obj)}}</view>
页面 JS 文件 (page.js)
Page({
  data: {
    id: 1,
    items: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    obj: {
      name: "张三"
    }
  },

  getUpperCaseName: function(obj) {
    return obj.name.toUpperCase();
  }
});

解释

  1. 条件渲染

    • 使用 wx:ifwx:else 根据 id 的值显示不同的内容。
    • 如果 id 等于 1,则显示 "ID 等于 1";否则显示 "ID 不等于 1"
  2. 循环渲染

    • 使用 wx:for 遍历 items 数组,并显示每个数组元素。
    • wx:key="index" 用于优化列表渲染性能。
  3. 调用方法

    • 在 WXML 中调用 getUpperCaseName 方法,该方法将对象的 name 属性转换为大写并返回。
    • 页面上会显示 "ZHANG SAN"

通过这些方法,你可以在微信小程序中实现复杂的逻辑和动态内容渲染。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2192702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

冯诺依曼体系|操作系统

目录 一、硬件&#xff1a;冯诺依曼体系 1.冯诺依曼体系结构 2.冯诺依曼体系结构组成 3.内存的重要性 &#xff08;1&#xff09;提升运行速度 &#xff08;2&#xff09;提升运行效率 二、软件&#xff1a;操作系统 1.什么是操作系统 &#xff08;1&#xff09;内部理…

代码随想录Day54

今天是国庆假期后的恢复做题的第一天&#xff0c;摆了那么久感觉还是有点没摆够哈哈哈哈&#xff01;今天两道题都是困难题&#xff0c;两道题都去看讲解了&#xff0c;感觉这两道题是高度相似的&#xff0c;接雨水用单调递增栈来做&#xff0c;柱状图中最大的矩形用单调递减栈…

水凝胶发生器,不对称设计妙,医电应用前景广

大家好&#xff01;今天来了解一种具有工程机械离子不对称性的水凝胶发生器——《A high-current hydrogel generator with engineered mechanoionic asymmetry》发表于《Nature Communications》。嘿&#xff01;你能想象一种材料&#xff0c;它能像魔法一样在低频运动下产生高…

消息称苹果iPhone系列将完全放弃LCD屏幕

近日&#xff0c;据日经亚洲消息&#xff0c;苹果公司将于明年初推出搭载OLED显示屏的 iPhone SE 4&#xff0c;标志其整个iPhone系列已进入从 LCD 过渡到 OLED 技术的最后阶段&#xff0c;2025年及之后销售的所有iPhone机型均将搭载OLED屏幕。 由此&#xff0c;两家日本面板供…

【一起学NLP】Chapter3-使用神经网络解决问题

目录 使用神经网络解决问题Tip:数据集划分学习使用的代码Tip:epochTip:数据打乱Trainer类Tip-高速化计算 使用神经网络解决问题 import sys sys.path.append(..) # 为了引入父目录的文件而进行的设定 from dataset import spiral import matplotlib.pyplot as pltx,t spiral.…

解决银河麒麟桌面操作系统V10(ARM)中`apt-get update`“正在等待报头”问题

解决银河麒麟桌面操作系统V10&#xff08;ARM&#xff09;中apt-get update“正在等待报头”问题 1、问题描述2、 解决方法步骤一&#xff1a;打开终端步骤二&#xff1a;清理APT缓存步骤三&#xff1a;再次尝试更新软件源 &#x1f496;The Begin&#x1f496;点点关注&#x…

利士策分享,故事创作和造谣及假新闻之间如何界定?

利士策分享&#xff0c;故事创作和造谣及假新闻之间如何界定&#xff1f; 在这个信息爆炸的时代&#xff0c;一篇打着“人民网”旗号的虚假文章《低俗炒作博眼球&#xff0c;曝"瓜"文化不可取》在网络上迅速发酵&#xff0c;不仅误导了公众&#xff0c;更对无辜者造…

【源码+文档】基于SpringBoot+Vue校园智慧迎新服务平台

&#x1f6a9;如何选题&#xff1f; 如何选题、让题目的难度在可控范围&#xff0c;以及如何在选题过程以及整个毕设过程中如何与老师沟通&#xff0c;这些问题是需要大家在选题前需要考虑的&#xff0c;具体的方法我会在文末详细为你解答。 &#x1f6ad;如何快速熟悉一个项目…

MySQL【知识改变命运】03

表的基本操作 1&#xff1a;查看所有表2&#xff1a;创建表3&#xff1a;查看表结构4&#xff1a;修改表5&#xff1a; 删除表 前言&#xff1a;我们先了解一个知识&#xff1a; MySQL安装后会有MySQL服务——管理多个库——每个库管理多个表——每个表管理多行数据——数据行由…

《Windows PE》4.1导入表

导入表顾名思义&#xff0c;就是记录外部导入函数信息的表。这些信息包括外部导入函数的序号、名称、地址和所属的DLL动态链接库的名称。Windows程序中使用的所有API接口函数都是从系统DLL中调用的。当然也可能是自定义的DLL动态链接库。对于调用方&#xff0c;我们称之为导入函…

本田汽车投资SiLC Technologies:携手共促自动驾驶技术新飞跃

SiLC Technologies获本田汽车投资:加速自动驾驶技术革新 近日,硅谷光子学初创公司SiLC Technologies宣布获得本田汽车的投资,这一合作标志着双方将共同推进自动驾驶技术领域的革新与发展。本田此次投资不仅体现了对SiLC Technologies技术实力的认可,也彰显了本田在自动驾驶…

进程管理和进程调度的基本过程(详细版)

“无论你走得多慢&#xff0c;总比停下来要好。” 对于操作系统内核来说&#xff0c;里面包含的功能是非常多的&#xff0c;其中有一个功能和日常开发&#xff0c;息息相关。 进程管理&#xff1a; 进程&#xff08;process/task&#xff09;&#xff1a;进程就是正在执行的应…

一个月学会Java 第4天 运算符和数据转换

Day4 运算符和数据转换 今天来讲运算符&#xff0c;每个运算符的作用和现象&#xff0c;首先我们先复习一下数据类型&#xff0c; day2讲过基本数据类型有八种&#xff0c;int、short、long、byte、char、boolean、float、double&#xff0c;分别为四个整型、一个字符型、一个布…

代码随想录 | Day28 | 回溯算法:组合组合总和III

代码随想录 | Day28 | 回溯算法&#xff1a;组合&&组合总和III 关于这个章节&#xff0c;大家最好是对递归函数的理解要比较到位&#xff0c;听着b站视频课可能呢才舒服点&#xff0c;可以先去搜一搜关于递归函数的讲解&#xff0c;理解&#xff0c;再开始这个章节会比…

01 从0开始搭建django环境

1 安装相关版本的django&#xff0c;这里&#xff0c;我以5.1.1为例子 pip3 install django5.1.1 (.venv) D:\DjangoCode\MS>pip3 install django5.1.1 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting django5.1.1Using cached https://pypi.t…

算法题总结(七)——栈与队列

1、栈常用操作 &#xff08;1&#xff09;栈定义 Stack<Integer> stack new Stack<Integer>();&#xff08;2&#xff09;栈操作 .栈是否为空 isEmpty(); .查询栈顶元素&#xff0c;不改变栈 peek(); .弹出栈顶元素&#xff0c;改变栈 pop(); .压入栈顶 push(); …

Quantify LLM

大模型如果用bfloat16需要特别大的显存&#xff0c;所以都在用INT4、INT8做量化&#xff0c;效果不错 量化学习 为什么量化 对Llama13B模型来说&#xff0c;不同算子加载需要的显存不同 中间是TensorCore&#xff0c;左右两边是显存&#xff0c;加载过程中模型要频繁地将wei…

【移动端】事件基础

一、移动端事件分类 移动端事件主要分为以下几类&#xff1a; 1. 触摸事件&#xff08;Touch Events&#xff09; 触摸事件是移动设备特有的事件&#xff0c;用来处理用户通过触摸屏幕进行的操作。主要的触摸事件有&#xff1a; touchstart&#xff1a;手指触摸屏幕时触发。…

k8s 之动态创建pv失败(踩坑)

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/02/05 18:53 初学容易范的错&#xff01; 问题简述&#xff1a; StorageClass创建成功&#xff0c;StatefulSet 启动不成功&#xff0c;与pvc关联的po和pvc一直是pending状态。 也就是说&#xff0c;StorageClass没有动态…

MQTT--Java整合EMQX

目录 1、简介2、准备3、使用步骤3.1 引入依赖3.2 创建生产者和消费者3.3 测试 总结PS: 1、简介 本文章实现了一个简单的MQTT客户端&#xff0c;使用Eclipse Paho库让Java和EMQX整合&#xff0c;测试客户端初始化时配置Broker地址、客户端ID、用户名和密码。连接成功后&#xf…