Json Schema Form Condition显示/隐藏基于枚举选择的项目

时间:2019-02-12 15:11:59

标签: jsonschema angular6-json-schema-form

我有一个角度项目,我在其中使用JSON模式表单(angular6-json-schema-form)在JSON模式中构建表单。

json模式表单规范允许使用条件开关来基于另一个表单元素的值选择性地显示/隐藏元素。文档中给出的唯一示例只是简单的布尔值(如果X具有或不具有值,则显示Y)。

在我的示例中,当从选择列表中选择选择的文本输入类型为(文本,电子邮件,URL)之一但不显示时,我需要显示/隐藏“占位符”文本输入当其(密码,颜色)时。请参阅下面的枚举数组,其中包含我需要测试的选项。

{
schema: {
type: 'object',
required: ['title'],
properties: {
type: {
    title: 'Input Type',
    description: 'Input type assists browser/phone UI behavior',
    type: 'string',
    enum: ['color', 'email', 'integer', 'number', 'password', 'tel', 'text']
  },
placeholder: {
    title: 'Placeholder',
    description: 'The placeholder is shown inside the text element by default',
    type: 'string'
  }
},
layout: [
{ items: ['title', 'type'] },
{
  key: 'placeholder',
  condition: 'model.type.enum[selectedValue]!=="color"'
},
}

在上面的示例中,唯一可以显示/隐藏占位符元素的内容如下:

{
  key: 'placeholder',
  condition: 'model.type'
}

当选择了“无”以外的任何内容时,只会显示元素。

我尝试过:

condition: 'model,type.modelValue !== "color"'
condition: 'type.modelValue !== "color"'
condition: 'model.type !== "color"'

无论类型选择元素中选择了什么,这些都不会触发占位符元素的出现。

1 个答案:

答案 0 :(得分:1)

这是我已实施的可解决问题的解决方案:

layout: [
 { items: ['title', 'type'] },
 {
 type: 'section',
  condition: {
    functionBody: 'try { return model.type && model.type!=="color" && model.type!=="password" } catch(e){ return false }'
  },
  items: ['placeholder']
 },
...
]