amis做工具库 - Evalutor的使用 (字符串变量解析)

const { isEffectiveApi, parse, Evaluator } = amisRequire("amis");

// console.log(window.amisRequire); //amisRequire是sdk方式引入挂载到window到。里面还有一些window document赋值,需要在浏览器环境下执行。 node端执行会报错,只能npm install单独使用

const {Evaluator, parse}= require("amis-formula");  //node端单独使用amis-formula

console.log( Evaluator, parse);

字符串变量解析:
1-1.new Function + with 原生实现。字符串支持单引号和双引号,仅对字符串类型进行解析处理。

传入字符串格式的number object array会根据data自动解析变量并转为对应类型。若返回字符串必须包个冒号: "'aaa’",不然会当作变量来解析报错。   

如下:

   let constant = "node.title"; //或者"this.node.title"
   const data = { node: { title: 'xxx' } }
   const func = (constant, data) => {
       try{  
          if(constant && typeof constant === 'string') {
             constant = (new Function('data',`with(data){ return ${constant} }`).bind(data))(data); // '"aa"'、'[]'、'{}'等new Function处理 = > 'aa' [] {}
           }
          return constant;
        }catch(e){
            console.warn(e, constant);
            return null;
        }
    }
    console.log(func(constant, data));//输出xxx

(amis的formula组件执行函数evalJS底层就是new Function实现的)

1-2.还可以用amis的Evalutor做parse解析(evalMode: true),效果与new Function一样。

将字符串格式的number object array自动转为对应类型。若返回字符串必须包个冒号: "'aaa'".   这样的纯字符串"node.title",会当做对象解析.

如下:

const { parse, Evaluator} = amisRequire("amis");
let path = "node.title"
let data = { node: { title: "xxx" } }
    const ast = parse(path, {
      evalMode: true,
      allowFilter: true
    });
    const ret = new Evaluator(data).evalute(ast);
console.log(ret); // 输出结果为 'xxx'

2.amis的Evalutor(evalMode: false)  

好处是可以使用amis中提供的各种filter和函数进行处理。

ps:也可以直接用resolveMapping(path, data); 函数即可(内部是Evalutor(evalMode: false))

如下:

const { parse, Evaluator, resolveMapping } =   amisRequire("amis");
let path = "${node.title | json}"
let data = { node: { title: "xxx" } }
const defaultFilter = '| raw';
    const ast = parse(path, {
      evalMode: false,
      allowFilter: true
    });
    const ret = new Evaluator(data, {
      defaultFilter
    }).evalute(ast);
console.log(ret); //输出结果为"xxx"

const ret1= resolveMapping(path, data);
Console.log(ret1);//输出结果为"xxx"

只解析${},如:${ [] }、${ {key:'value'} }、${node.title}

表达式内可以使用amis的函数,且可获取window、ls、ss、cookie的数据${cookie: 'admin-token'}

额外: JSON.parse() 仅支持JSON格式 字符串必须为双引号。 不符合json格式报错。 也可以实现类型转换。     

传入字符串格式的number object array自动解析为对应类型。若返回字符串必须用双引号包一层:JSON.parse("\"aaa\"")

        try{ 
 		    if(constant && typeof constant === 'string') constant = JSON.parse(constant); 
return constant;
        }catch(e){
            console.warn(e, constant);
            return null;
        }

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CC1利用链分析

分析版本 Commons Collections 3.1 JDK 8u65 环境配置参考JAVA安全初探(三):CC1链全分析 分析过程 我的Github主页Java反序列化学习同步更新,有简单的利用链图 首先看下CC1利用链的RCE利用点,在接口Transformer 接下来查看此接口的实现类&#xf…

GBJ406-ASEMI无人机专用整流桥GBJ406

编辑:ll GBJ406-ASEMI无人机专用整流桥GBJ406 型号:GBJ406 品牌:ASEMI 封装:GBJ-4 最大重复峰值反向电压:600V 最大正向平均整流电流(Vdss):4A 功率(Pd):中小功率 芯片个数:…

【小学期】常用基于Swing的七个静态界面

示例1:基本的带按钮和标签的界面 import javax.swing.*; import java.awt.*;public class SimpleSwingApp1 {public static void main(String[] args) {JFrame frame new JFrame("Simple Swing App 1");frame.setDefaultCloseOperation(JFrame.EXIT_ON_C…

申请免费6个月SSL证书方式和证书特点槽点

当前,HTTPS访问已成为网站标配。随着免费证书平台的不断涌现,Lets Encrypt尤为瞩目,其提供的泛域名和多域名证书申请功能,显著降低了站长和企业的经济负担。从一开始,来此加密就支持通过Lets Encrypt申请免费的域名SSL…

OpenFAST软件中linux-gnu,linux-intel,macos-gnu,vtk,windows-intel文件的作用

在OpenFAST中,5MW_Land_DLL_WTurb目录下的这五个文件夹分别有不同的用途,主要是为了支持不同操作系统和平台的编译和仿真工作。以下是每个文件夹的总结及其作用: linux-gnu 作用:包含用于GNU编译器套件(GCC&#xff09…

【高性能服务器】单进程服务器

🔥博客主页: 我要成为C领域大神🎥系列专栏:【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 单进程服务器 …

基于Java的地方废物回收机构管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java技术,MIS的总体思想,MySQL数据库 工具:Eclipse,…

落石滑坡监测报警系统:创新保障高速公路安全

​ ​​在现代交通建设中,高速公路的安全性和稳定性至关重要。特别是易发生落石区域,如何有效预防和应对落石滑坡带来的事故成为了一项关键性挑战。为此,落石滑坡监测报警系统应运而生,它通过先进的技术手段,为高速…

计算机网络微课堂(湖科大教书匠)TCP部分

计算机网络微课堂(湖科大教书匠)TCP部分 【计算机网络微课堂(有字幕无背景音乐版)】 TCP的流量控制 一般来说,我们希望数据传输得更快一些。但如果发送方把数据发送得过快,接收方就可能来不及接收&#…

win11 (将星x17promax) 安装WSL 子系统

最初只是想着在win11系统下挂载ext4盘符,方便使用。 目录 0. 简介1.安装WSL子系统1.1 环境确认1.1.1 虚拟化设置1.1.2 系统设置1.1.3 开启开发者模式(此项有必要?)1.1.4 安装WSL子系统 2.WSL操作指令2.0 WSL相关命令2.1 WSL重置2.…

pytorch神经网络训练(VGG-19)

VGG-19 导包 import torchimport torch.nn as nnimport torch.optim as optimimport torchvisionfrom torchvision import datasets, transformsfrom torch.utils.data import DataLoaderimport matplotlib.pyplot as plt 数据预处理和增强 transform transforms.Compose(…

java的序列化和反序列化

一、概念 序列化是将对象的常态存储到特定的存储介质中的过程。 反序列化是将特定的存储介质中的数据重新构建对象的过程。 问题 为每个对象属性——编写读写代码,过程很繁琐且非常容易出错,如何解决? 二、使用Object Output Stream类实现…

C++:enum枚举共用体union

enum枚举 C继承C的枚举用法 (1)典型枚举类型定义,枚举变量定义和使用 (2)枚举类型中的枚举值常量不能和其他外部常量名称冲突: 举例1宏定义,举例2另一个枚举 // 定义一个名为Color的枚举类型 enum Color {RED, // 红色,默认值…

golang跨平台GUI框架fyne介绍与使用详解,开放案例

golang跨平台GUI框架fyne介绍与使用详解 Fyne 是一个使用 Go 编写的易于使用的 UI 工具包和应用程序 API。 它旨在构建使用单一代码库在桌面和移动设备上运行的应用程序。 通过批量调用身份证实名和三网手机实名和银行卡核验等接口,完成fyne框架的基本使用介绍 主要…

AES加密算法及AES-CMAC原理白话版系统解析

本文框架 前言1. AES加密理论1.1 不同AES算法区别1.2 加密过程介绍1.2.1 加密模式和填充方案选择1.2.2 密钥扩展1.2.3分组处理1.2.4多轮加密1.2.4.1字节替换1.2.4.2行移位1.2.4.3列混淆1.2.4.4轮密钥加1.3 加密模式1.3.1ECB模式1.3.2CBC模式1.3.3CTR模式1.3.4CFB模式1.3.5 OFB模…

技术周总结2024.06.17~06.23(Doris数据库)

文章目录 一、06.18 周二1.1) 问题01: doris数据表写入使用 stream load好还是 inser into好 一、06.18 周二 1.1) 问题01: doris数据表写入使用 stream load好还是 inser into好 对于Doris数据表的写入操作,通常推荐…

动手学深度学习(Pytorch版)代码实践 -计算机视觉-46语义分割和数据集

46语义分割和数据集 # 图像分割和实例分割 """ 图像分割将图像划分为若干组成区域,这类问题的方法通常利用图像中像素之间的相关性。 它在训练时不需要有关图像像素的标签信息,在预测时也无法保证分割出的区域具有我们希望得到的语义。 图…

PDF处理篇:如何调整 PDF 图像的大小

将视觉效果无缝集成到 PDF 中的能力使它们成为强大的通信工具。然而,笨拙的图像大小会迅速扰乱文档的流程,阻碍清晰度和专业性。幸运的是,GeekerPDF 和Adobe Acrobat等流行的应用程序提供了用户友好的解决方案来应对这一挑战。这个全面的指南…

LabVIEW项目外协时选择公司与个人兼职的比较

​在选择LabVIEW项目外协合作伙伴时,外协公司和个人兼职各有优劣。个人兼职成本较低且灵活,但在可靠性、技术覆盖面、资源和风险管理上存在不足。而外协公司拥有专业团队、丰富资源、完善的项目管理和风险控制,尽管成本较高,但能提…

30 哈希的应用

位图 概念 题目 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何判断一个数是否在这40亿个整数中 1.遍历,时间复杂度O(N) 2.二分查找,需要先排序,排序(N*logN),二分查找,logN。…
最新文章