微信小程序:模板语法

模板语法

微信小程序有自己单独的一套模板语法。

  1. WXML 结构

    WXML 数据写法和Vue相似,数据通过 {{}} 包裹。

    <text>{{ msg }}</text>
    
  2. WXSS 样式

    WXSS 具有 CSS 大部分的特性,小程序在 WXSS 也做了一些扩充和修改。

    • rpx 单位

      rpx 将屏幕等分为 750 份,屏幕总宽度相当于 750rpx ,可以自适应不同屏幕。

      例:在 iphone6/7/8 上,屏幕宽度为375px,相当于750个物理像素。

      .box {width: 200rpx;height: 200rpx;
      }
      
    • 样式导入

      @import 用于样式导入。

      @import "./css/common/test.wxss"
      
  3. Js 逻辑交互

    <text>{{ msg }}</text>
    <button bindtap="changeMsg">点击</button>
    
    Page({// 页面初始数据data: {msg: '你好'},// 点击改变msgchangeMsg () {this.setData({msg: "Hello World"})}
    })
    

动态绑定属性

  • 数据绑定

    <img> 的 src 属性和 vue 不同,地址写法为 src="{{ 图片地址 }}"

    <view><text>{{ title }}</text><img src="{{ imgURL }}"></img>
    </view>
    
  • 数据定义在 .js 文件中的 data 内。

    Page({// 数据data: {titie: "标题",imgURL: "../images/1.jpg"}
    })
    

小程序宿主环境

宿主环境是指 微信客户端给小程序所提供的环境

通信模型

运行环境分为渲染层和逻辑层,WXML 模板和 WXSS 样式工作在渲染层,JS 脚本工作在逻辑层。

运行机制

  1. 微信客户端在打开小程序之前,会把整个小程序的代码包下载到本地。

  2. 通过 app.jsonpages 字段获取当前小程序的所有页面路径。

    pages 中的一个行就是首页。

    {"pages":["pages/index/index","pages/logs/logs"]
    }
    
  3. 小程序启动后,执行 app.js 定义的 App 实例的 onLaunch 回调。

    App({onLaunch: function () {// 小程序启动之后 触发}
    })
    
  4. 微信客户端先根据 pages/logs/logs.json 配置生成一个页面,接着装载这个页面的 WXML 结构 和 WXSS 样式,最后装载 log.js

    /** pages/logs/logs.js **/
    Page({data: { // 参与页面渲染的数据logs: []},onLoad: function () {// 页面渲染后 执行}
    })
    
  5. Page 是一个页面构造器,会生成一个页面,在生成页面的同时,小程序会把 data 数据 和 index.wxml 一起渲染出最终结构。

  6. 页面渲染完成后,页面实例会收到一个 onLoad 的回调,这个回调可以处理逻辑,一般用来请求网络接口获取数据。

组件

小程序提供了丰富的基础组件。详情
小程序自定义组件 详情

scroll-view 滚动条

<scroll-view class="container1" scroll-y><view>A</view><view>B</view><view>C</view>
</scroll-view>
scroll-view 属性类型默认值说明
scroll-xbooleanfalse允许横向滚动
scroll-ybooleanfalse允许纵向滚动

swiper 轮播图

<swiper indicator-dots autoplay circular interval="2000"><swiper-item> <view>A</view> </swiper-item><swiper-item> <view>B</view> </swiper-item><swiper-item> <view>C</view> </swiper-item>
</swiper>
swiper 属性类型默认值说明
indicator-dotsbooleanfalse是否显示熊安源的
indicator-colorcolorrgba(0, 0, 0, .3)小圆点颜色
indicator-active-colorcolor#000000当前选中的小圆点颜色
autoplaybooleanfalse是否自动轮播
intervalnumber5000自动轮播时间间隔
circularbooleanfalse是否无缝轮播

selectable 长按选中

在客户端,长按屏幕可以选中进行复制。

<text selectable>文本</text>

rich-text 富文本

将文本渲染成 html 格式。

<rich-text nodes="<h1>一级标题</h1>"></rich-text>

image 图片

<image src='/images/1.jpg'></image>
image 属性类型默认值说明
srcstring图片地址
modestringscaleToFill图片裁剪、缩放模式
webpbooleanfalse默认不解析 webP 格式,只支持网络资源
lazy-loadbooleanfalse图片懒加载,在即将进入一定范围(上下三屏)时才开始加载
show-menu-by-longpressbooleanfalse长按图片显示发送给朋友、收藏、保存图片、搜一搜、打开名片/前往群聊/打开小程序的菜单。
binderroreventhandle当错误发生时触发,event.detail = {errMsg}
bindloadeventhandle当图片载入完毕时触发,event.detail = {height, width}
  • mode 缩放模式

    • scaleToFill:不保持纵横比缩放,使图片的宽高完全拉伸至填满 image 元素;
    • aspectFit:保持纵横比缩放,使图片的长边能完全显示出来;
    • aspectFill:保持纵横比缩放图片,只保证图片的短边能完全显示出来;
    • widthFix:宽度不变,高度自动变化,保持原图宽高比不变;
    • heightFix:高度不变,宽度自动变化,保持原图宽高比不变;
  • mode 裁剪模式

    裁剪模式不缩放图片。

    • top/bottom/center/left:只显示图片的 顶部/底部/中间/左边 区域;
    • top left/top right/bottom left/bottom right:只显示图片的 左上/右上/左下/右下 区域;

API

方便的调起微信提供的能力,例如获取用户信息、微信支付等等。详情

例:微信扫一扫

// 语法格式:
wx.scanCode({success: (res) => {console.log(res)}
})

事件监听API

on 开头的 API 用来监听某个事件是否触发。

wx.onCompassChange(function (res) {console.log(res.direction)
})

同步API

Sync 结尾的 API 都是同步 API。

try {// 存储本地缓存wx.setStorageSync('key', 'value')
} catch (e) {console.error(e)
}

异步 API

大多数 API 都是异步 API。这类 API 接口通常都接受一个 Object 类型的参数,这个参数都支持按需指定以下字段来接收接口调用结果。

异步 API 支持 callback & promise 两种调用方式,接口参数 object 中不包含 success/fail/complete 时将默认返回 promise,否则仍按回调方式执行,无返回值。

/* 微信登录 */// callback 形式调用
wx.login({success(res) {console.log(res.code)}
})// promise 形式调用
wx.login().then(res => console.log('res: ', res))
Object 参数名类型必填说明
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)
其他Any-接口定义的其他参数
  • 回调函数的参数

    successfailcomplete 函数调用时会传入一个 Object 类型参数,包含以下字段。

    属性类型说明
    errMsgstring错误信息,如果调用成功返回 ${apiName}:ok
    errCodenumber错误码,仅部分 API 支持,具体含义请参考对应 API 文档,成功时为 0
    其他Any接口返回的其他数据

云开发API

需要开通 微信云开发 ,在小程序直接调用服务端的云函数。

  • 云函数同样支持 promise 形式调用。
wx.cloud.callFunction({// 云函数名称name: 'cloudFunc',// 传给云函数的参数data: {a: 1,b: 2,},success: function(res) {console.log(res.result)},fail: console.error
})

事件绑定

点击事件

bindtapcatchtap 都是点击事件,bindtap 会阻止事件冒泡。

mut-bind 也可以绑定事件,mut-bind 触发后,冒泡到其他节点上的 mut-bind 不会触发,但是 bindtapcatchtap 依旧会触发。

<text>{{ msg }}</text>
<button bindtap="changeMsg">点击</button><button catchtap="changeMsg">点击</button><view mut-bind:tap="handleTap3">点击</view>
// pages/home/home.js
Page({data: {msg: '你好'},// 点击改变msgchangeMsg () {this.setData({ msg: "Hello World" })},
})
事件对象

组件触发事件后,处理函数会手到一个事件对象 BaseEvent 。详情

  • canvas 中的触摸事件不可冒泡,所以没有 currentTarget。
<text>{{ msg }}</text>
<button bindtap="changeMsg" data-step="{{'你好'}}">点击</button>
Page({data: {msg: 'hello'},// 点击改变msgchangeMsg (e) {this.setData({ msg: e.target.dataset.step })},
}
data-* 事件传参

通关 data-参数名 的形式传参,再通过 e.target.dataset.参数名 的形式获取。

<button bindtap="changeCount" data-step="{{ 2 }}">事件传参</button>
Page({// 数据data: {count: 1,}// 点击增加changeCount(e) {this.setData({count: this.data.count + e.target.dataset.step})}
})
  • e.target.dataset.step 是通过 data-step 传递过来的数据。

bindinput 双向数据绑定

<input type="text" bindinput="ipt" ></input>
Page({data: {ipt: ''}
})

获取 input 的值

通过 e.detail.value 获取表单数据。

<input class="ipt" type="text" value="{{ ipt }}" bindinput="inputHandle" />
Page({// 更新当前的input表单数据inputHandle(e) {this.data.ipt = e.detail.value},
})

setData 修改数据

Page({data: {num: 1,},// 修改数据updateNum() {this.data.num += 1}
})

条件渲染

频繁切换时,使用 hidden

控制条件复杂时,使用 wx:if 搭配 wx:elif wx:else 使用。

block 标签

block 配合 vx:for 使用,block 不渲染在页面上。

<block wx:for="{{ list }}"><view>{{ index }} -- {{ item }}</view>
</block>

hidden 显示和隐藏

hidden 为 true,表示隐藏,false 则显示。

<view hidden="{{ false }}">显示</view>
<view hidden="{{ true }}">隐藏</view>

列表渲染

wx:for 用于循环渲染。item 为每一项,index 为下标,wx:key 为唯一标识。

<view wx:for="{{ list }}" wx:key="{{ item }}"><text>{{ index }}--{{ item }}</text>
</view>
  • 别名

    通过 wx:for-indexwx:for-item 来起别名。

    <view wx:for="{{ list }}" wx:key="i" wx:for-index="i" wx:for-item="itemName"><text>{{ i }}--{{ itemName }}</text>
    </view>
    

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

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

相关文章

【Django+Vue3 线上教育平台项目实战】登录功能模块之短信登录与钉钉三方登录

文章目录 前言一、几个关键概念1.HTTP无状态性2.Session机制3.Token认证4.JWT 二、通过手机号验证码登录1.前端短信登录界面2.发送短信接口与短信登录接口3.Vue 设置interceptors拦截器4. 服务端验证采用自定义中间件方式实现5. 操作流程及效果图如下&#xff1a; 三、通过第三…

记录些MySQL题集(9)

MySQL之死锁问题分析、事务隔离与锁机制的底层原理剖析 一、MySQL中的死锁现象 所谓的并发事务&#xff0c;本质上就是MySQL内部多条工作线程并行执行的情况&#xff0c;也正由于MySQL是多线程应用&#xff0c;所以需要具备完善的锁机制来避免线程不安全问题的问题产生&#…

手机如何伪装ip网络地址

伪装IP地址是指通过技术手段修改网络设备的IP地址&#xff0c;使其看起来像是来自另一个网络位置。这种技术通常用于隐藏真实的网络活动&#xff0c;以保护隐私。那么&#xff0c;手机如何伪装IP网络地址&#xff1f; 要在手机上伪装IP地址&#xff0c;‌可以通过下载和安装手机…

Spring事件监听机制详解

Spring事件监听机制详解 在现代软件开发中&#xff0c;解耦和灵活性是两个非常重要的设计原则。Spring 框架通过事件驱动的编程模型&#xff0c;实现了组件之间的松耦合。本文将介绍Spring事件监听机制的原理&#xff0c;并通过示例展示如何实现这一机制。 什么是Spring事件监…

数据资产通证化,堪比20年前的房地产?

大数据产业创新服务媒体 ——聚焦数据 改变商业 想象一下&#xff0c;一个简单的点击&#xff0c;一次不经意的搜索&#xff0c;一段简短的对话&#xff0c;它们在数字世界里留下了什么&#xff1f;是的&#xff0c;是数据。这些看似微不足道的数字碎片&#xff0c;汇聚成海&a…

【python】PyQt5的窗口界面的各种交互逻辑实现,轻松掌控图形化界面程序

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

【中项】系统集成项目管理工程师-第一模块:IT技术和管理-1.1信息与信息化-1.1.2信息系统基础

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&#xff0c;目前涵盖了计算机软件、计算机网络、计算机应…

Dart语法问答到实践

语法问答 Dart语法输出调试信息的方法叫&#xff1f; print Dart语言里定义抽象类的关键字是&#xff1f; abstract Dart语言里String转Int的方法是&#xff1f; int.parse Dart语言的数据类型String是首字母大写&#xff0c;而int是首字母小写&#xff1f; 受c/c和java的影响&…

Office动态水印终于来了

在信息安全日益重要的今天&#xff0c;保护敏感信息变得尤为关键。目前&#xff0c;动态水印甚至是盲水印技术已经在各种企业软件中广泛应用&#xff0c;常见的钉钉和企业微信等都已经支持此类技术&#xff0c;用户查看消息时画面会显示对应用户的姓名和工号等&#xff0c;而作…

小程序-视图与逻辑

一、页面导航 声明式导航 编程式导航 导航传参 1.声明式导航传参 2.编程式导航传参 3.在onload中接收导航参数 二、页面事件 下拉刷新 上拉触底 三、生命周期 分类 生命周期函数分类 1.应用的生命周期函数 2.页面的生命周期函数 四、WXS脚本 基础语法 wxs的特点 五、案…

Matlab学习笔记01 - 基本数据类型

Matlab学习笔记01 - 基本数据类型 1、数据类型转换2、矩阵2.1 访问单个矩阵元素2.2 访问多个矩阵元素2.3 矩阵转置 3、字符与字符串4、数值与字符串5、元胞数组 1、数据类型转换 十进制转十六进制字符串‘FF’ >> hex2dec(3ff)ans 1023十进制转十六进制字符串 >>…

几何相关计算

目录 一、 判断两个矩形是否相交 二、判断两条线段是否相交 三、判断点是否在多边形内 四、垂足计算 五、贝塞尔曲线 六、坐标系 一、 判断两个矩形是否相交 当矩形1的最大值比矩形2的最小值都小&#xff0c;那矩形1和矩形2一定不相交&#xff0c;其他同理。 struct Po…

GaussDB数据库使用gs_loader导入数据

1、创建用户并授予使用权限 CREATE USER gsloader WTH PASSWORD Gsloader14; GRANT ALL ON FUNCTlON copy_error_log_create() TO gsloader; GRANT ALL ON SCHEMA public To gsloader; SELECT copy_error_log_create(); SELECT copy_summary_create(); GRANT ALL FRIVILEGES ON…

阐述软件23种设计模式背后的图论和代数结构基础

软件设计模式是一套被广泛认可的解决特定设计问题的解决方案,它们在软件开发中被重复使用。虽然设计模式本身并不直接依赖于图论或代数结构,但这些数学概念为理解和实现某些设计模式提供了理论基础。以下是一些设计模式以及它们可能与图论和代数结构相关的方面: 1. **策略模…

华为OD 机试真题 - 分割均衡字符串(Python)

题目描述 均衡串定义:字符串只包含两种字符&#xff0c;且两种字符的个数相同。 给定一个均衡字符串&#xff0c;请给出可分割成新的均衡子串的最大个数。 约定字符串中只包含大写的’X"和’Y’两种字符。 输入描述 均衡串:XXYYXY 字符串的长度[2,10000]。给定的字符…

keepalive简单配置

一、keepalive相关知识 1.1 keepalive介绍 keepalive即LVS集群当中的高可用架构&#xff0c;只是针对调度器的高可用。是高可用的HA架构。 keepalive就是基于VRRP协议来实现LVS高可用的方案。 组播地址 224.0.0.18&#xff0c;根据组播地址进行通信&#xff0c;主备之间发送…

10.1 标注、注记图层和注记整体说明

文章目录 前言标注、注记图层和注记QGis中的标注QGis中的注释(Annotation)图层QGis中的注记 总结 前言 介绍标注、注记图层和注记说明&#xff1a;文章中的示例代码均来自开源项目qgis_cpp_api_apps 标注、注记图层和注记 有时地图需要使用一些文字信息说明其中的地理要素或其…

OSX MongoDB 安装与配置指南

OSX MongoDB 安装与配置指南 MongoDB 是一款流行的开源 NoSQL 数据库,广泛用于数据存储、索引和实时分析。本指南将详细介绍在 macOS(OSX)操作系统上安装和配置 MongoDB 的步骤。 1. 安装 MongoDB 1.1 使用 Homebrew 安装 Homebrew 是 macOS 上的包管理器,可以简化软件…

如何落地实际场景,解决跨境传输共性需求?免费白皮书可下载

在全球化的背景下&#xff0c;海外市场对于数据驱动的产品和服务的需求不断增加&#xff0c;各行业数据跨境传输也日趋频繁&#xff0c;在这种前景下&#xff0c;越来越多的企业寻求更深度的跨国业务及合作&#xff0c;因此&#xff0c;企业数据跨境流动也成为了势不可挡的趋势…

51单片机嵌入式开发:11、 STC89C52RC 实现一个滑动的led点阵程序

STC89C52RC 实现一个滑动的led点阵程序 1 概述2 LED点阵介绍2.1 LED概述2.2 LED点阵注意事项 3 LED点阵原理3.1 Led点阵内部电路3.2 原理图电路 4 软件实现点阵图案的滑动4.1 软件工程代码4.2 Protues仿真 5 扩展74HC595&#xff08;后续专题开展&#xff09;6 总结 第十一节 1…