微信小程序新手入门教程三:基础语法介绍

news2024/12/23 4:13:56

WXML(WeiXin Markup Language)是框架设计的一套标签语言,可以与各种组件相结合,进行页面构建。

一 常用标签

wxml的语法结构与我们熟悉的html很像,但在细节处略有不同,我们可以参考html标签对比记忆。wxml中最经常使用的标签无异于是<view>标签,它就相当于html中的div标签,可以进行区域的分隔,同样是块级元素。

我们可以新建一个页面,尝试添加如下两行代码:

<view>我是第一句话</view>
<view>我是第二句话</view>

可以看到在页面上这两行话分别出现在了两行里,由此可见view是一个块级元素,会自动换行。

接下来是我们之前已经见到过的<text>标签,它相当于span标签,是一个行内元素。我们尝试把上面两行代码中的标签换成text。

可以看到这两行文字出现在了同一行。

同样,wxml里也有checkbox、radio、img等标签,基础用法与html一样,这里我们先不做过多讲解,在后面的组件部分再进行其扩展功能的详细介绍。

二 数据类型

wxml支持的数据类型也很常见,如字符串、数字、布尔、对象、表达式等,我们直接用几个例子进行说明。

    <!-- 1 字符串 -->
    <view>{{msg}}</view>
    <!-- 2 数字类型 -->
    <view>{{num}}</view>
    <!-- 3 boolean类型 -->
    <view>是否为空:{{isEmp}}</view>
    <!-- 4 对象类型 -->
    <view>{{person.name}}</view>
    <view>{{person.age}}</view>
     <!-- 5 在标签的属性中使用 -->
     <view data-num="{{num}}">自定义</view>
     <!-- 6 使用Boolean类型充当属性(默认被选中) -->
     <view><checkbox checked/></view>
     <!-- 7 表达式 -->
     <!-- 可以在{{}}中加入表达式(数字运算,字符串拼接,逻辑运算,三元表达式....) -->
    <view>{{1 + 1}}</view>
    <view>{{10 % 2}}</view>
    <view>{{'11' + '22'}}</view>
    <view>{{10 % 2 == 0 ? '偶数' : '奇数'}}</view>

 这里的{{}}和vue语法中的用法相同,表示插值,{{}}的值将会被替代为对应 data 对象上对应属性的值。无论何时,绑定的数据对象属性发生了改变,插值处的内容都会更新。也就是说我们需要在data数组中存放对应的属性,具体代码如下:

data: {
    msg:"hello mina",
    num:10000,
    isEmp:false,
    person:{
      age:72,
      height:123,
      name:"张三"
    },
    list:[
      {
        id:0,
        name:"zhangsan"
      },
      {
        id:1,
        name:"lisi"
      },
      {
        id:2,
      name:"wangwu"
      },
      {
        id:3,
        name:"zhaoliu"
      }

    ]
  }

效果如下:

三 循环 (列表渲染)

我们可以在组件上使用 wx:for 控制属性绑定一个数组,从而使用数组中各项的数据重复渲染该组件。默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item。

wx:for="{{数组或对象}}"    wx:for-item="循环项的名称"    wx:for-index="循环项的索引"

wx:key="唯一值"  

<view>数组循环</view>
<view wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="id">
    索引:{{index}}
    值:{{item.name}}
 </view>

<view>对象循环</view>
<view wx:for="{{person}}" wx:for-item="value" wx:for-index="key">
   属性:{{key}}
   值:{{value}}
</view>

我们也可以使用wx:for进行嵌套,如下代码功能为写一个九九乘法表:

<view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="i">
  <view wx:for="{{[1, 2, 3, 4, 5, 6, 7, 8, 9]}}" wx:for-item="j">
    <view wx:if="{{i <= j}}">
      {{i}} * {{j}} = {{i * j}}
    </view>
  </view>
</view>

 四 判断(条件渲染)

我们可以在组件中使用 wx:if来判断是否需要渲染该代码块,也可以用 wx:elif 和 wx:else 来添加一个 else 块。

语法:wx:if ="{{true/false}}

<!-- wx:if ="{{true/false}}" -->
    <view>
      <view>条件渲染</view>
      <view wx:if="{{true}}">显示</view>
      <view wx:if="{{false}}">隐藏</view>

      <view wx:if="{{false}}">1</view>
      <view wx:elif="{{false}}">2</view>
      <view wx:else>3</view>
    </view>

在wxml中,还可以使用hidden来控制组件的显示与否。具体用法为:

1)在标签上直接加上hidden

<view hidden> 01</view>

2)使用hidden=“{{true}}”

<view hidden ="{{true}}"> 01</view>

我们可以看到,wx:if与hidden都可以实现隐藏元素的功能,那么它们有什么区别呢?

wx:if :以动态创建和移除元素的方式,控制元素的展示与隐藏

 

hidden :以切换样式的方式(display: none/block;),控制元素的显示与隐藏

 由于hidden是以设置display来实现功能的,因此hidden与display样式不能同时使用

在实现业务时,我们也可以根据两者的特性,来选择优先使用哪种方式来隐藏元素。

当标签不是频繁的切换显示,优先使用wx:if,直接把标签从页面移除掉;否则优先使用hidden,通过切换样式的方式切换显示

五 数据绑定

在wxml中,数据绑定可以分成两步

1.data中定义数据

2.在WXML中使用数据

  有没有觉得很眼熟?我们在学习数据类型的时候其实就已经用到了数据绑定。

具体而言,就是要把我们需要的数据首先在页面对应的 .js 文件中,定义到 data 对象中,之后到wxml页面中进行渲染,在需要使用该变量的地方使用 Mustache 语法({{}})将变量名包起来即可。

 通过数据绑定,我们可以绑定内容、属性,还可以做一些简单的运算(字符串拼接、数字运算、三元运算符)

在wxml页面中添加如下代码:

<view>
    <view>绑定内容:{{content}}</view>  
    <view>绑定属性:<img src="{{src}}" /></view>
    <view>绑定运算:{{num+1}}+1</view>
</view>

在data中添加如下数据:

data: {
    num:1,
    content:"我是要绑定的内容!~",
    src:"https://ts1.cn.mm.bing.net/th/id/R-C.66d7b796377883a92aad65b283ef1f84?rik=sQ%2fKoYAcr%2bOwsw&riu=http%3a%2f%2fwww.quazero.com%2fuploads%2fallimg%2f140305%2f1-140305131415.jpg&ehk=Hxl%2fQ9pbEiuuybrGWTEPJOhvrFK9C3vyCcWicooXfNE%3d&risl=&pid=ImgRaw&r=0"
  },

可以看到效果如下:

 六 事件绑定

事件就是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。例如鼠标点击时可以添加事件,输入框输入文本时也可以添加事件。我们经常见到的点击提交按钮,出现弹框提示“提交成功”,就是通过事件实现的。

 我们接下来通过一个小案例来完成对事件绑定的学习。

为页面添加一个输入框,要求用户在输入框输入数字后,可以立刻在页面上显示出来用户输入的内容。

这是一个非常常见的事件绑定案例, 实现思想就是在文本框上绑定输入事件,当有文本输入时就调用事件函数,通过事件源对象获取输入内容并赋值给data中的数据,再通过数据绑定将其显示在页面上。

首先我们先搞一个输入框和负责回显数字的view标签,并为输入框绑定输入事件bindinput(这里补充一下另两个事件:点击事件bindtap和状态改变时事件bindchange)。事件函数名为handleInput。

<input type="text" bindinput="handleInput"/>
<view>{{num}}</view>

之后就是在data中添加num数据,以及完善我们handleInput函数的内部逻辑了。

 data: {
    num:0
  }

首先在data中添加变量num,赋初值为0。

handleInput(e){
    // console.log(e.detail.value);
    this.setData({
      num:e.detail.value
    })
  }

然后在与data并列的位置添加函数handleInput(), 将事件源对象获取的输入内容赋值给num。这里需要额外注意一下赋值的方式,是通过setData进行赋值的,而不是我们常用的this.data.num = xx或this.num = xx 。

可以看到我们的页面刚开始是左边这样的,当我们在上方的文本框中输入数字后,下面的数字就会跟着改变了:

 那么,问题升级,你能否在页面上添加两个按钮,实现点击按钮就能数字的加一减一功能呢?

<button bindtap="handleTap" data-operation="{{1}}">+</button>
<button bindtap="handleTap" data-operation="{{-1}}">-</button>

首先我们先加入两个按钮,增加我们之前提到过的点击事件bindtap,绑定事件函数。这里需要额外注意,我们不能通过函数名+()的形式直接传参!但是可以用自定义属性的方式进行参数传递,这里我们定义属性data-operation。在函数中使用const关键字定义常量operation接受传递过来的值。

handleTap(e){
    // 获取自定义属性operation
    const operation = e.currentTarget.dataset.operation;
    this.setData({
      num:this.data.num + operation
    })
  }

这里的核心思路就是将num的值改为当前值加上传递过来的参数值。


关于wxml的基础语法介绍就介绍这么多啦,老规矩,更多的内容可以到官方文档WXML 语法参考 / 介绍 (qq.com) 中查看。下一篇我们一起学习样式的设计和更多的标签~

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

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

相关文章

基于协同过滤的个性化电影推荐系统分析设计python+flask

本系统为用户而设计制作个性化电影推荐管理&#xff0c;旨在实现个性化电影推荐智能化、现代化管理。本个性化电影推荐自动化系统的开发和研制的最终目的是将个性化电影推荐的运作模式从手工记录数据转变为网络信息查询管理&#xff0c;从而为现代管理人员的使用提供更多的便利…

华为OD机试真题【日志首次上报最多积分】

1、题目描述 【日志首次上报最多积分】 日志采集是运维系统的的核心组件。日志是按行生成&#xff0c;每行记做一条&#xff0c;由采集系统分批上报。 如果上报太频繁&#xff0c;会对服务端造成压力;如果上报太晚&#xff0c;会降低用户的体验&#xff1b; 如果一次上报的…

京东物流基于 StarRocks 的数据分析平台建设

作者&#xff1a;京东物流 数据专家 刘敬斌 小编导读&#xff1a; 京东集团 2007 年开始自建物流&#xff0c;2017 年 4 月正式成立京东物流集团&#xff0c;截至目前&#xff0c;京东物流已经构建了一套全面的智能物流系统&#xff0c;实现服务自动化、运营数字化及决策智能化…

whale-quant 学习 part7:量化回测

量化回测 计算策略评估指标聚宽平台量化回测实践策略实现 参考 计算策略评估指标 使用数据为&#xff1a;贵州茅台&#xff08;600519.SH&#xff09;、工商银行&#xff08;601398.SH&#xff09;、中国平安&#xff08;601318.SH&#xff09;&#xff0c;策略基准是沪深300指…

使用输出事件激活Simulink块

什么是输出事件? 输出事件是发生在Stateflow图表中,但在图表外的Simulink块中可见的事件。这种类型的事件允许图表将图表中发生的事件通知模型中的其他块。 您可以使用输出事件来激活同一模型中的其他块。您可以在图表中定义多个输出事件,其中每个输出事件映射到一个输出端…

Flutter组件 StatefulWidget、StatelessWidget 可继承写法

前言 学过Java的同学&#xff0c;应该都知道面向对象语言的三大特征&#xff0c;封装、继承、多态&#xff1b; Dart也是面向对象的语言&#xff0c;但是在Flutter中的很多组件都被下划线 _ 标记为私有&#xff0c;导致无法继承&#xff0c;本文将介绍一种非私有的创建组件写…

大数据-Spark-关于Json数据格式的数据的处理与练习

上一篇&#xff1a; 大数据-MapReduce-关于Json数据格式的数据的处理与练习-CSDN博客 16.7 Json在Spark中的引用 依旧利用上篇的数据去获取每部电影的平均分 {"mid":1,"rate":6,"uid":"u001","ts":15632433243} {"m…

Qt/C++音视频开发66-音频变速不变调/重采样/提高音量/变速变调/倍速播放/sonic库使用

一、前言 之前在做倍速这个功能的时候&#xff0c;发现快速播放会有滴滴滴的破音出现&#xff0c;正常1倍速没有这个问题&#xff0c;尽管这个破音间隔很短&#xff0c;要放大音量才能听到&#xff0c;但是总归是不完美的&#xff0c;后面发现&#xff0c;通过修改qaudiooutpu…

centOS/Linux系统安全加固方案手册

服务器系统:centos8.1版本 说明:该安全加固手册最适用版本为centos8.1版本,其他服务器系统版本可作为参考。 1.账号和口令 1.1 禁用或删除无用账号 减少系统无用账号,降低安全风险。 操作步骤  使用命令 userdel <用户名> 删除不必要的账号。  使用命令 passwd…

ubuntu 上安装和配置Apache2+Subversion

目录 一、安装Apache2和SVN 二、Apache2设置 三、subversion配置 四、创建仓库和设置权限 五、仓库备份和恢复 系统环境 Ubuntu Linux (20.04) apache2 Subversion(1.13.0) 一、安装Apache2和SVN 通过命令在线安装apache2和subversion apt-get install apache2 libap…

Datax问题记录

1、同步mysql&#xff1a;OS errno 24 - Too many open files 2023-11-20 12:30:04.371 [job-0] ERROR JobContainer - Exception when job run com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-07], Description:[读取数据库数据失败. 请检查您的…

颐和园龙纹珍宝展亮相,文物预防保护科技护航

在皇家园林颐和园的深处&#xff0c;一场独特的文化盛宴正静静上演。2月1日&#xff0c;“祥龙贺岁—颐和园藏龙纹题材文物特展”在德和园华丽揭幕。此次特展汇聚了66件珍贵文物&#xff0c;包括玉器、瓷器、书画、珐琅、家具等&#xff0c;每一件都是颐和园园藏的瑰宝。这些文…

LLM应用开发与落地:使用gradio十分钟搭建聊天UI

一、背景 如果你是做LLM应用开发的&#xff0c;特别是做后端开发&#xff0c;你一定会遇到怎么快速写一个聊天UI界面来调试prompt或agent的问题。这时候的你可能在苦恼中&#xff0c;毕竟react.js, next.js, css, html也不是每个人都那么熟练&#xff0c;对吧&#xff1f;即使…

pyqt5-QCheckBox控件使用介绍

一、简介 作用&#xff1a;用于给用户提供若干选项中的多选操作&#xff0c;比如&#xff1a;爱好可以有多个 等等。 继承自 QAbstractButton。 1、基础工程 from PyQt5.Qt import * import sysapp QApplication(sys.argv)window QWidget()window.setWindowTitle("Q…

一文掌握SpringBoot注解之@Configuration知识文集(3)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【ADI 知识库】 AN-1354:集成式ZIF、RF至比特、LTE、广域接收机分析和测试结果

官方链接&#xff1a; https://www.analog.com/cn/resources/app-notes/an-1354.html 简介 本应用笔记参考了3GPP TS 36系列文件和ADI公司的多种数据手册、特性标定报告和实验室测试结果。本文重点关注基于集成式零中频(ZIF)、RF至比特、IC (AD9371)的多载波广域LTE接收机的性…

使用css绘制小三角形

要使用CSS绘制小三角形&#xff0c;您可以使用border属性来设置边框样式。下面是一种常见的绘制小三角形的方法&#xff1a; <style>.box {width: 0;height: 0;/* border-top: 10px solid red; */border-bottom: 10px solid blue;border-left: 10px solid transparent;b…

2024PMP考试新考纲-【业务环境领域】典型真题和很详细解析(3)

华研荟继续分享【业务环境Business Environment领域】在新考纲下的真题&#xff0c;帮助大家体会和理解新考纲下PMP的考试特点和如何应用所学的知识和常识&#xff08;经验&#xff09;来解题&#xff0c;并且举一反三&#xff0c;一次性3A通过2024年PMP考试。 2024年PMP考试新…

Interpolator:在Android中方便使用一些常见的CubicBezier贝塞尔曲线动画效果

说明 方便在Android中使用Interpolator一些常见的CubicBezier贝塞尔曲线动画效果。 示意图如下 import android.view.animation.Interpolator import androidx.core.view.animation.PathInterpolatorCompat/*** 参考* android https://yisibl.github.io/cubic-bezier* 实现常…

在flutter中集成Excel导入和导出

flutter中集成Excel导入和导出功能 1、需要的依赖 在pubspec.yaml #excel导出syncfusion_flutter_xlsio: ^24.1.45open_file: ^3.0.1#导入excelflutter_excel: ^1.0.1#选择文件的依赖file_picker: ^6.1.1&#xff08;1&#xff09;依赖说明 在测试时&#xff0c;我们在使用导…