amis模板语法、数据映射与表达式
模板字符串
表达式中获取变量
可以支持在普通文本中,使用数据映射语法:${xxx} 获取数据域中变量的值
"Hello ${text}"
渲染 html
使用数据映射语法:${xxx} 获取数据域中变量的值,并渲染 HTML
"<h1>Hello</h1> <span>${text}</span>"
表达式
"${xxx == 1 ? 'One' : 'Others'}"
官网地址
JavaScript 模板引擎
注意:
在 JavaScript 模板引擎中,我们获取数据域变量的方式是data.xxx,而不是之前的${xxx},如果你熟悉 JavaScript 的话,这里模板引擎其实是将数据域,当做当前代码的数据作用域进行执行,因此需要使用data.xxx进行取值
要注意使用模板的时候在不同的场景下要使用正确的取值方式。
注意
模板字符串 和 Javascript 模板引擎 不可以交叉使用
链式取值
可以使用.进行链式取值
eg:
{"type": "page","data": {"name": "rick","company": {"name": "baidu","department": "it"}},"body": {"type": "tpl","tpl": "my name is ${name}, I work for ${company.name}"}
}
效果类似于:
my name is rick, I work for baidu
复杂配置
展开所配置的数据
可以使用"&",作为数据映射 key,展开所配置的变量,例如:
{"type": "page","body": {"type": "form","data": {"a": "1","b": "2","c": {"e": "3","f": "4","g": "5"}},//复杂配置"api": {"url": "/amis/api/mock2/form/saveForm","method": "post","data": {"name": "${name}","email": "${email}","&": "${c}"}},"body": [{"type": "input-text","name": "name","label": "姓名:"},{"name": "email","type": "input-text","label": "邮箱:"}]}
}
"&"标识符会将所配置的c变量的value值,展开并拼接在data中。查看网络面板可以看到数据如下:
{"name": "rick","email": "rick@gmail.comn","e": "3","f": "4","g": "5"
}
数组提取值
"data": {"items": {"$table": {"a": "${a}","c": "${c}"}}
}
这个配置的意思是,只提取table数组中的a变量和c变量,组成新的数组,赋值给items变量
namespace
默认取值都是从当前组件上下文数据链中取数据,但是有些数据可能不在这个数据链中,比如有些数据存在全局变量,有的数据存在 localstorage 中。
如:${window:document.title} 意思是从全局变量中取页面的标题。
目前有以下三种 namespace
- window 即全局变量
- ls 即 localStorage, 如果值是 json
对象,可以直接当对象用比如:${ls:xxxxxlocalStrorageKey.xxxx} - ss 即 sessionStorage,同上。
- cookie 即 cookies,同上。
过滤器
过滤器是对数据映射的一种增强,它的作用是对获取数据做一些处理,基本用法如下:
${xxx [ |filter1 |filter2...] }
串联使用过滤器
使用单一的过滤器可能无法满足你的所有需求,幸运的是 amis 支持串联使用过滤器,而前一个过滤器的值会作为下一个过滤器的入参,进行下一步处理。语法如下:
${xxx|filter1|filter2|...}
json
用于将数据转换为json格式字符串
基本用法
// 用法
${xxx | json[:tabSize]}
//示例
{"type": "page","data": {"info": {"name": "rick","company": "baidu"}},"body": {"type": "tpl","tpl": "my info is ${info|json}"}
}
// 结果
my info is { "name": "rick", "company": "baidu" }
// 指定缩进数
${xxx|json:4} // 指定缩进为4个空格
toJson
与json相反,用于将json格式的字符串,转换为javascript对象
//用法
${xxx | toJson}
//示例{"type": "page","data": {"info": "{\"name\": \"rick\", \"company\": \"baidu\"}"},"body": {"type": "tpl","tpl": "my info is ${info|toJson}"}
}
//结果
my info is [object Object]
date
日期格式化过滤器,用于把特定时间值按指定格式输出。
// 基本用法
${xxx | date[:format][:inputFormat]}// 例如你想将某一个时间值,以 2020-04-14 这样的格式输出,那么查找 moment 文档可知配置格式应为 YYYY-MM-DD,即:
{"type": "page","data": {"now": 1586865590},"body": {"type": "tpl","tpl": "now is ${now|date:YYYY-MM-DD}"}
}now is 2020-04-14// 如果你的数据值默认不是X格式(即时间戳格式),那么需要配置inputformat参数用于解析当前时间值,例如:
{"type": "page","data": {"now": "2020/4/14 19:59:50"},"body": {"type": "tpl","tpl": "now is ${now|date:LLL:YYYY/MM/DD HH\\:mm\\:ss}"}
}now is 2020年4月14日晚上7点59分
toDate
将日期字符串转成日期对象, 第二个参数为字符串的日期格式类型。
用法:
${xxx | toDate:YYYY-MM-DD}
dateModify
日期修改,将输入的日期对象修改后返回新的日期对象,支持四种操作符。
add 加 n (秒|分钟|小时|天|月|季度|年)。
subtract 减 n (秒|分钟|小时|天|月|季度|年)。
startOf 修改成某个维度的开头。
endOf 修改成某个纬度的结尾。
// 将 xxx 修改成 7 天前,假如值是 10 月 8 号,那么处理完后就是 10 月 1 号。${xxx | dateModify:subtract:-7:day}{"type": "page","body": "上个月第一天是:${_|now|dateModify:subtract:1:month|dateModify:startOf:month|date:YYYY-MM-DD HH\\:mm\\:ss}"
}上个月第一天是:2024-12-01 00:00:00
fromNow
{"type": "page","data": {"oldDate": "2021-10-01"},"body": "${oldDate|fromNow}"
}3 年前
其他注意的详见官方文档
表达式
官方文档
{"type": "page","body": [{"type": "form","wrapWithPanel": false,"data": {"val": 3.5},"body": [{"type": "static","label": "IF(true, 2, 3)","tpl": "${IF(true, 2, 3)}"},{"type": "static","label": "MAX(1, -1, 2, 3, 5, -9)","tpl": "${MAX(1, -1, 2, 3, 5, -9)}"},{"type": "static","label": "ROUND(3.5)","tpl": "${ROUND(3.5)}"},{"type": "static","label": "ROUND(val)","tpl": "${ROUND(val)}"},{"type": "static","label": "AVG(4, 6, 10, 10, 10)","tpl": "${AVG(4, 6, 10, 10, 10)}"},{"type": "static","label": "UPPERMONEY(7682.01)","tpl": "${UPPERMONEY(7682.01)}"},{"type": "static","label": "TIMESTAMP(DATE(2021, 11, 21, 0, 0, 0), 'x')","tpl": "${TIMESTAMP(DATE(2021, 11, 21, 0, 0, 0), 'x')}"},{"type": "static","label": "DATETOSTR(NOW(), 'YYYY-MM-DD')","tpl": "${DATETOSTR(NOW(), 'YYYY-MM-DD')}"}]}]
}IF(true, 2, 3)
2
MAX(1, -1, 2, 3, 5, -9)
5
ROUND(3.5)
3.5
ROUND(val)
3.5
AVG(4, 6, 10, 10, 10)
8
UPPERMONEY(7682.01)
柒仟陆佰捌拾贰元壹分
TIMESTAMP(DATE(2021, 11, 21, 0, 0, 0), 'x')
1640016000000
DATETOSTR(NOW(), 'YYYY-MM-DD')
2025-01-16
逻辑函数
XOR
用法:XOR(condition1, condition2, …expressionN)
condition:…expression 条件表达式,多个用逗号隔开。例如:语文成绩>80, 数学成绩>80
返回:boolean
异或处理,多个表达式组中存在奇数个真时认为真。
示例:XOR(语文成绩 > 80, 数学成绩 > 80, 英语成绩 > 80)
三门成绩中有一门或者三门大于 80,则返回 true,否则返回 false。
IFS
用法:IFS(condition1, result1, condition2, result2,…conditionN, resultN)
condition:…expression 条件表达式
result:…any 返回值
返回:any 第一个满足条件的结果,没有命中的返回 false。
判断函数集合,相当于多个 else if 合并成一个。
示例:IFS(语文成绩 > 80, “优秀”, 语文成绩 > 60, “良”, “继续努力”),
如果语文成绩大于 80,则返回优秀,否则判断大于 60 分,则返回良,否则返回继续努力。
其他类型函数:数学函数、文本函数、日期函数、数组、编码详见官方文档
相关文章:
amis模板语法、数据映射与表达式
模板字符串 表达式中获取变量 可以支持在普通文本中,使用数据映射语法:${xxx} 获取数据域中变量的值 "Hello ${text}"渲染 html 使用数据映射语法:${xxx} 获取数据域中变量的值,并渲染 HTML "<h1>Hello<…...
频域增强通道注意力机制EFCAM模型详解及代码复现
背景与动机 在深度学习领域,如何有效处理时间序列数据一直是一个重要的研究方向。近年来, 频域分析技术 在时间序列处理中展现出了巨大潜力,特别是离散余弦变换(DCT)因其能够高效捕捉低频信息并避免高频噪声干扰而受到广泛关注。 FECAM模型的开发正是基于这一背景,旨在…...
GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效
代码托管平台 GitLab 国际站(GitLab.com)近日发布公告,官宣即将停止对中国大陆、香港、澳门地区的用户账号提供服务,并提供 60 天过渡期自行迁移账户数据,超期未迁移的账号可能会被 GitLab 清除。这一重要决策引起了全…...
BPG图像库和实用程序(译)
1)快速介绍 编辑Makefile以更改编译选项(默认编译选项对于Linux应该是OK的)。输入make来编译,输入make install来安装编译后的二进制文件。bpgview:为了编译它,你需要安装SDL和SDL_image库。Emscripten的使用ÿ…...
简述1个业务过程:从客户端调用接口,再到调用中间件(nacos、redis、kafka、feign),数据库的过程
以下是一个常见的业务过程示例,展示了从客户端调用接口,再到调用中间件(Nacos、Redis、Kafka、Feign)和数据库的过程: 假设我们有一个电商系统,客户端要查询某个商品的详细信息,这个商品信息可…...
01.02、判定是否互为字符重排
01.02、[简单] 判定是否互为字符重排 1、题目描述 给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。 在这道题中,我们的任务是判断两个字符串 s1 和 s2 是…...
什么是.NET中的反射,它有哪些应用场景
反射是.NET框架提供的一种强大的机制,它允许程序在运行时查询和操作对象的类型信息。以下是对.NET中反射的详细解释及其应用场景: 一、反射的定义 在.NET中,所有类型的信息(包括类、结构、委托、接口、枚举等以及它们的成员信息…...
Linux离线部署ELK
文章目录 前期准备开始安装安装elastic search安装logstash安装kibana 配置ELK配置ElasticSearch配置logstash配置kibana 启动ELK启动命令启动测试 设置ELK策略创建ILM策略将ILM策略与日志index关联查看索引是否被ILM策略管理 前期准备 ELK包含三部分软件 ElasticSearch用作搜…...
解决 chls.pro/ssl 无法进入问题
使用charles的xdm不知道有没有遇到这样的问题。手机上访问 chls.pro/ssl 就始终进不去了… 各种检查,ip地址、证书,ssl设置等等都正常,就是进不去。 在一位好心人的提醒下得到了一个解决办法。那就是换一个地址 最新地址是: charlesproxy…...
Rust 游戏开发框架指南
Rust 游戏开发框架指南 主流游戏引擎 1. Bevy 最受欢迎的 Rust 游戏引擎之一,基于 ECS(实体组件系统)架构。 特点: 🚀 高性能 ECS 系统📦 热重载支持🎨 现代渲染器🔊 内置音频系…...
hadoop3.3和hive4.0安装——单节点
hadoop3.3x和hive4.0安装部署 为什么我要安装hive4.0,因为阿里云镜像只有hive4.0 软件相互兼容性版本 系统centos7 uname -a如果内核3.0以上可以用 安装jdk1.8以上的版本(配置好环境变量) hadoop3.3.x与hive4.0.x 创建目录 mkdir -p /us…...
centos安装golang
1.下载golang golang所有版本网址 https://studygolang.com/dl //下载并解压到/usr/local文件下 wget https://studygolang.com/dl/golang/go1.18.3.linux-amd64.tar.gz //解压并复制到/user/local文件夹下 tar -C /usr/local -zxf go1.18.3.linux-amd64.tar.gz 2.编辑环境变…...
博图 linucx vmware
电脑与 PLC 的连接 博图装在虚拟机里,PLC 通过网线与电脑连接 可以是使用网线直接连接,也可以中间接个路由器或交换机 问题在于虚拟机提供多种网络连接方式,但不是每种都可以与 PLC 建立连接 以 VMware 虚拟机为例,进入编辑/虚拟网…...
Service Work离线体验与性能优化
Service Work离线体验与性能优化 引言 先放个意外事件,万事开头难🤣🤣🤣 原计划是分享离线应用与数据资源缓存的应用实践,结果发现这一技术已被web标准废弃 曾经做过一个PC应用,业务需求要求应用具备容灾…...
Unity 语音转文字 Vosk 离线库
市场有很多语音库,这里介绍Vosk SDK 除了支持untiy外还有原生开发服务器等 目录 安装unity示例demo下载语音训练文件运行demo结尾一键三联 注意事项 有可能debug出来的文本是空的,(确保麦克风正常,且索引正确)分大…...
VSCode连接Github的重重困难及解决方案!
一、背景: 我首先在github创建了一个新的项目,并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时,错误出现了 二、报错及解决方案: 1.解决方案: 需要在git上配置用…...
《AI赋能鸿蒙Next,打造极致沉浸感游戏》
在游戏开发领域,鸿蒙Next系统与人工智能技术的结合为开发者们带来了前所未有的机遇,使打造更具沉浸感的游戏成为可能。以下将深入探讨如何利用人工智能在鸿蒙Next上开发出令人身临其境的游戏。 利用AI优化游戏角色智能行为 在传统游戏中,非…...
小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2
文章目录 一、 关于 RangePicker 组件返回的moment 方法示例 一、 关于 RangePicker 组件返回的moment 方法示例 moment方法中日后开发有用的方法如下: form.getFieldsValue().date[0].weeksInWeekYear(),form.getFieldsValue().date[0].zoneName(), form.getFiel…...
<C++学习>C++ std 多线程教程
C std 多线程教程 理解多线程的概念 多线程是一种并发编程技术,它允许程序同时运行多个任务。每个线程共享同一进程的资源(如内存),但拥有独立的执行路径。多线程编程在现代 C 中变得更加便捷和安全,标准库提供了强大…...
用 Python 自动化处理日常任务
💖 欢迎来到我的博客! 非常高兴能在这里与您相遇。在这里,您不仅能获得有趣的技术分享,还能感受到轻松愉快的氛围。无论您是编程新手,还是资深开发者,都能在这里找到属于您的知识宝藏,学习和成长…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
