当前位置: 首页 > news >正文

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 2020414日晚上759

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模板语法、数据映射与表达式

模板字符串 表达式中获取变量 可以支持在普通文本中&#xff0c;使用数据映射语法&#xff1a;${xxx} 获取数据域中变量的值 "Hello ${text}"渲染 html 使用数据映射语法&#xff1a;${xxx} 获取数据域中变量的值&#xff0c;并渲染 HTML "<h1>Hello<…...

频域增强通道注意力机制EFCAM模型详解及代码复现

背景与动机 在深度学习领域,如何有效处理时间序列数据一直是一个重要的研究方向。近年来, 频域分析技术 在时间序列处理中展现出了巨大潜力,特别是离散余弦变换(DCT)因其能够高效捕捉低频信息并避免高频噪声干扰而受到广泛关注。 FECAM模型的开发正是基于这一背景,旨在…...

GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效

代码托管平台 GitLab 国际站&#xff08;GitLab.com&#xff09;近日发布公告&#xff0c;官宣即将停止对中国大陆、香港、澳门地区的用户账号提供服务&#xff0c;并提供 60 天过渡期自行迁移账户数据&#xff0c;超期未迁移的账号可能会被 GitLab 清除。这一重要决策引起了全…...

BPG图像库和实用程序(译)

1)快速介绍 编辑Makefile以更改编译选项&#xff08;默认编译选项对于Linux应该是OK的&#xff09;。输入make来编译&#xff0c;输入make install来安装编译后的二进制文件。bpgview&#xff1a;为了编译它&#xff0c;你需要安装SDL和SDL_image库。Emscripten的使用&#xff…...

简述1个业务过程:从客户端调用接口,再到调用中间件(nacos、redis、kafka、feign),数据库的过程

以下是一个常见的业务过程示例&#xff0c;展示了从客户端调用接口&#xff0c;再到调用中间件&#xff08;Nacos、Redis、Kafka、Feign&#xff09;和数据库的过程&#xff1a; 假设我们有一个电商系统&#xff0c;客户端要查询某个商品的详细信息&#xff0c;这个商品信息可…...

01.02、判定是否互为字符重排

01.02、[简单] 判定是否互为字符重排 1、题目描述 给定两个由小写字母组成的字符串 s1 和 s2&#xff0c;请编写一个程序&#xff0c;确定其中一个字符串的字符重新排列后&#xff0c;能否变成另一个字符串。 在这道题中&#xff0c;我们的任务是判断两个字符串 s1 和 s2 是…...

什么是.NET中的反射,它有哪些应用场景

反射是.NET框架提供的一种强大的机制&#xff0c;它允许程序在运行时查询和操作对象的类型信息。以下是对.NET中反射的详细解释及其应用场景&#xff1a; 一、反射的定义 在.NET中&#xff0c;所有类型的信息&#xff08;包括类、结构、委托、接口、枚举等以及它们的成员信息…...

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 就始终进不去了… 各种检查&#xff0c;ip地址、证书&#xff0c;ssl设置等等都正常&#xff0c;就是进不去。 在一位好心人的提醒下得到了一个解决办法。那就是换一个地址 最新地址是: charlesproxy…...

Rust 游戏开发框架指南

Rust 游戏开发框架指南 主流游戏引擎 1. Bevy 最受欢迎的 Rust 游戏引擎之一&#xff0c;基于 ECS&#xff08;实体组件系统&#xff09;架构。 特点&#xff1a; &#x1f680; 高性能 ECS 系统&#x1f4e6; 热重载支持&#x1f3a8; 现代渲染器&#x1f50a; 内置音频系…...

hadoop3.3和hive4.0安装——单节点

hadoop3.3x和hive4.0安装部署 为什么我要安装hive4.0&#xff0c;因为阿里云镜像只有hive4.0 软件相互兼容性版本 系统centos7 uname -a如果内核3.0以上可以用 安装jdk1.8以上的版本&#xff08;配置好环境变量&#xff09; 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 的连接 博图装在虚拟机里&#xff0c;PLC 通过网线与电脑连接 可以是使用网线直接连接&#xff0c;也可以中间接个路由器或交换机 问题在于虚拟机提供多种网络连接方式&#xff0c;但不是每种都可以与 PLC 建立连接 以 VMware 虚拟机为例&#xff0c;进入编辑/虚拟网…...

Service Work离线体验与性能优化

Service Work离线体验与性能优化 引言 先放个意外事件&#xff0c;万事开头难&#x1f923;&#x1f923;&#x1f923; 原计划是分享离线应用与数据资源缓存的应用实践&#xff0c;结果发现这一技术已被web标准废弃 曾经做过一个PC应用&#xff0c;业务需求要求应用具备容灾…...

Unity 语音转文字 Vosk 离线库

市场有很多语音库&#xff0c;这里介绍Vosk SDK 除了支持untiy外还有原生开发服务器等 目录 安装unity示例demo下载语音训练文件运行demo结尾一键三联 注意事项 有可能debug出来的文本是空的&#xff0c;&#xff08;确保麦克风正常&#xff0c;且索引正确&#xff09;分大…...

VSCode连接Github的重重困难及解决方案!

一、背景&#xff1a; 我首先在github创建了一个新的项目&#xff0c;并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时&#xff0c;错误出现了 二、报错及解决方案&#xff1a; 1.解决方案&#xff1a; 需要在git上配置用…...

《AI赋能鸿蒙Next,打造极致沉浸感游戏》

在游戏开发领域&#xff0c;鸿蒙Next系统与人工智能技术的结合为开发者们带来了前所未有的机遇&#xff0c;使打造更具沉浸感的游戏成为可能。以下将深入探讨如何利用人工智能在鸿蒙Next上开发出令人身临其境的游戏。 利用AI优化游戏角色智能行为 在传统游戏中&#xff0c;非…...

小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2

文章目录 一、 关于 RangePicker 组件返回的moment 方法示例 一、 关于 RangePicker 组件返回的moment 方法示例 moment方法中日后开发有用的方法如下&#xff1a; form.getFieldsValue().date[0].weeksInWeekYear(),form.getFieldsValue().date[0].zoneName(), form.getFiel…...

<C++学习>C++ std 多线程教程

C std 多线程教程 理解多线程的概念 多线程是一种并发编程技术&#xff0c;它允许程序同时运行多个任务。每个线程共享同一进程的资源&#xff08;如内存&#xff09;&#xff0c;但拥有独立的执行路径。多线程编程在现代 C 中变得更加便捷和安全&#xff0c;标准库提供了强大…...

用 Python 自动化处理日常任务

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)

Aspose.PDF 限制绕过方案&#xff1a;Java 字节码技术实战分享&#xff08;仅供学习&#xff09; 一、Aspose.PDF 简介二、说明&#xff08;⚠️仅供学习与研究使用&#xff09;三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...

AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机

这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机&#xff0c;因为在使用过程中发现 Airsim 对外部监控相机的描述模糊&#xff0c;而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置&#xff0c;最后在源码示例中找到了&#xff0c;所以感…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)

安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

小木的算法日记-多叉树的递归/层序遍历

&#x1f332; 从二叉树到森林&#xff1a;一文彻底搞懂多叉树遍历的艺术 &#x1f680; 引言 你好&#xff0c;未来的算法大神&#xff01; 在数据结构的世界里&#xff0c;“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的&#xff0c;它…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版

1.题目描述 2.思路 当前的元素可以重复使用。 &#xff08;1&#xff09;确定回溯算法函数的参数和返回值&#xff08;一般是void类型&#xff09; &#xff08;2&#xff09;因为是用递归实现的&#xff0c;所以我们要确定终止条件 &#xff08;3&#xff09;单层搜索逻辑 二…...