角度传递并将输入验证为地图

时间:2019-05-13 08:52:43

标签: angular typescript dictionary

我有一个输入文本,用户必须输入Json格式的字符串,例如:

    "test":"value",
    "test2":"value2"

提交输入时,我想将其用作Map并将其传递给我的端点。在输入中写入值以便创建Map的正确方法是什么?如果我通过此输入,则表示地图创建不正确。
我所做的是:

variables:Map = myInput;

 let variables:Map<String,any> = new Map(myInput);

,然后尝试遍历键集,但是没有用。如何从字符串输入创建Map,并检查是否正确?输入字符串被视为Map的正确语法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用JSON.parse()来解析输入文本,当它与Object相对应时,您可以使用Map轻松地将其转换为Object#entries()

const map = new Map(Object.entries(JSON.parse(inputValue)));

注意Object#entries()是es2017功能。确保在es2017的{​​{1}}部分加入lib

tsconfig.json

这是一个反应式表单验证器的最小示例,用于检查JSON代码是否有效并与对象相对应:

{
  "compilerOptions": {
    ...
    "lib": [
      ...,
      "es2017"
    ]
}

关于const jsonValidator: ValidatorFn = (control: AbstractControl) => { try { const obj = JSON.parse(control.value); if (typeof obj !== 'object' || Array.isArray(obj)) { throw new TypeError('Top level node should be an object'); } } catch (error) { return { parseError: error, }; } return null; }; 的显式键入:如果您只想在代码中接受某些类型的值,则可以在验证中添加一些检查:

Map

检查键没有任何意义,因为在JSON中它们只能是字符串。

下面是一个完整的示例:https://stackblitz.com/edit/angular-dnmfrg