如何将元素更改为以角度形式输入或下拉?

问题描述 投票:1回答:1

我正在制作角度6应用程序,我使用角度动态形式,值来自JSON ..

简单的JSON:

  jsonData: any = [
    {
      "elementType": "dropdown",
      "key": 'project',
      "label": 'Choose option to display',
      "options": [
        { "key": 'inputbox', "value": 'Show Project Level as input box' },
        { "key": 'dropdown', "value": 'Show Project Level as dropdown' }
      ],
      "order": 1
    },
    {
      "elementType": "textbox",
      "class": "col-12 col-md-4 col-sm-12",
      "key": "project_level",
      "label": "Project Level as input box",
      "type": "text",
      "value": "",
      "order": 2
    },
    {
      "elementType": "dropdown",
      "key": 'project_level',
      "label": 'Choose Project Level as dropdown',
      "options": [
        { "key": 'low', "value": 'Low' },
        { "key": 'medium', "value": 'Medium' },
        { "key": 'high', "value": 'High' }
      ],
      "order": 2
    }
  ];

要求只来自这个json ..

看看清楚的工作示例https://stackblitz.com/edit/angular-x4a5b6-5ys5hf

您可以在初始阶段看到我同时拥有输入框和dropdwon ..但是如果我从第一个下拉列表中选择显示项目级别作为下拉列表,我首先需要单独使用文本框,然后project_level键需要更改为选择框和反之亦然......

订单1有一个下拉列表,我有两个选项,

      "options": [
        { "key": 'inputbox', "value": 'Show Project Level as input box' },
        { "key": 'dropdown', "value": 'Show Project Level as dropdown' }
      ],

如果我们选择第一个选项,其值为“显示项目级别”作为输入框,而如果我们选择具有“显示项目级别”值的第二个选项作为下拉列表。

根据上面的选择,我需要相应地切换表单元素,比如用户选择Show Project Level as input box,然后我需要显示输入框,

    {
      "elementType": "textbox",
      "class": "col-12 col-md-4 col-sm-12",
      "key": "project_level",
      "label": "Project Level as input box",
      "type": "text",
      "value": "",
      "order": 2
    },

如果用户选择Show Project Level as dropdown,那么我需要显示下拉列表,

    {
      "elementType": "dropdown",
      "key": 'project_level',
      "label": 'Choose Project Level as dropdown',
      "options": [
        { "key": 'low', "value": 'Low' },
        { "key": 'medium', "value": 'Medium' },
        { "key": 'high', "value": 'High' }
      ],
      "order": 2
    }

所以关键是单独使用project_level,但只需要根据输入框或选择框的选择来更改表单元素。

请帮助我根据order 1下拉列表中的选择更改表单元素。

结果只能使用纯粹的angular和typescript / javascript方式而不需要jquery ..

javascript angular typescript angular6 angular-reactive-forms
1个回答
2
投票

@Undefined,或者使用两个变量“project_level_textbox”和“project_level_dropdown”,并根据formControl的值来制作可见或不是hte的形式或制作那个question.controlType(有些像是你可见或不是问题)

使用“type”,“field”和“value”添加一个新属性“controlTypeAlternative”并制作

[ngSwitch]="question.controlTypeAlternative?
    form.get(question.controlTypeAlternative.field).value==
 question.controlTypeAlternative.value?
        question.controlTypeAlternative.type:
        question.controlType:question.controlType"

如果运营商有些复杂?但主要是if具有属性controlTypeAlternative,检查form.control的值是否相等。如果不使用“controlType”

© www.soinside.com 2019 - 2024. All rights reserved.