当前位置: 首页 > 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 分,则返回良,否则返回继续努力。

其他类型函数:数学函数、文本函数、日期函数、数组、编码详见官方文档

http://www.lryc.cn/news/521916.html

相关文章:

  • 频域增强通道注意力机制EFCAM模型详解及代码复现
  • GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效
  • BPG图像库和实用程序(译)
  • 简述1个业务过程:从客户端调用接口,再到调用中间件(nacos、redis、kafka、feign),数据库的过程
  • 01.02、判定是否互为字符重排
  • 什么是.NET中的反射,它有哪些应用场景
  • Linux离线部署ELK
  • 解决 chls.pro/ssl 无法进入问题
  • Rust 游戏开发框架指南
  • hadoop3.3和hive4.0安装——单节点
  • centos安装golang
  • 博图 linucx vmware
  • Service Work离线体验与性能优化
  • Unity 语音转文字 Vosk 离线库
  • VSCode连接Github的重重困难及解决方案!
  • 《AI赋能鸿蒙Next,打造极致沉浸感游戏》
  • 小白:react antd 搭建框架关于 RangePicker DatePicker 时间组件使用记录 2
  • <C++学习>C++ std 多线程教程
  • 用 Python 自动化处理日常任务
  • 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(28):DSA数字签名
  • type 属性的用途和实现方式(图标,表单,数据可视化,自定义组件)
  • PSINS工具箱学习(四)捷联惯导更新算法
  • P1Linux和Docker常用终端命令:保姆级图文详解
  • Windows重装后NI板卡LabVIEW恢复正常
  • 深度解析统计学四大分布:Z、卡方、t 与 F 的关联与应用
  • zkServer.sh脚本
  • CV(10)--目标检测
  • UML系列之Rational Rose笔记七:状态图
  • C++单例模式的设计
  • 基于springboot的自习室预订系统