Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查所选动态表单输入是否满足某些条件_Javascript_Angular - Fatal编程技术网

Javascript 如何检查所选动态表单输入是否满足某些条件

Javascript 如何检查所选动态表单输入是否满足某些条件,javascript,angular,Javascript,Angular,我对Angular还是比较陌生的,这个嵌套JSON的逻辑对我来说越来越好,所以我道歉 我希望创建一个动态的形式,并作为一个起点使用 我试图构建只有在用户选择某个选项时才会显示的条件字段。我希望它能够正常工作,这样,如果我的任何选项在数组中定义了子项,则会显示带有这些子项的后续输入作为选项。我还有很多事情要考虑,但是现在我正在尝试得到它,这样当用户选择选项2时,选项2a和选项2b自动出现在另一个下拉菜单下面。 如何创建一个ngIf*语句,该语句表示“如果当前选择的选项有子项,请将它们添加到另一个输

我对Angular还是比较陌生的,这个嵌套JSON的逻辑对我来说越来越好,所以我道歉

我希望创建一个动态的形式,并作为一个起点使用

我试图构建只有在用户选择某个选项时才会显示的条件字段。我希望它能够正常工作,这样,如果我的任何选项在数组中定义了子项,则会显示带有这些子项的后续输入作为选项。我还有很多事情要考虑,但是现在我正在尝试得到它,这样当用户选择选项2时,选项2a和选项2b自动出现在另一个下拉菜单下面。 如何创建一个ngIf*语句,该语句表示“如果当前选择的选项有子项,请将它们添加到另一个输入中”

我尝试过检查“children”的数组长度是否大于零,还创建了一个名为“haschilds”的布尔值,并手动指定了一个真/假值以进行检查(尽管我不喜欢这种解决方案,因为完成的应用程序将有许多嵌套选项,并且只检查数组是否为空会更容易)

我也试过了,但肯定是语法错误,因为它对我不起作用

HTML:

当用户选择“选项2”时,我希望得到包含选项“选项2A”和“选项2B”的第二个下拉列表的输出,但我得到了一个解析错误


非常感谢

我已修改了您的代码,请检查:


我认为您正在寻找级联下拉列表。上述解决方案可能会帮助您检查。

谢谢!这使得语法更容易理解。看起来我缺少了ngIf的ngFor包装器,这是有道理的。非常感谢您花时间让我的代码正常运行。然而,我注意到,当前逻辑只有在从下拉列表中选择值“option 2”时才起作用。是否有一种方法可以使任何具有子项的项(无论名称如何)在选择时都会生成一个辅助下拉列表?您可以使其更具动态性,但必须更改json对象数据,以确保您的childControll名称和父选项值必须相同。在这里,我更改了json对象并动态比较了值。希望能有帮助
<ng-template [ngSwitchCase]="'select'">
        <div class="form-group">
          <label [for]="input.controlName"> {{input.controlName}}</label>
          <select [formControlName]="input.controlName" [name]="input.controlName" [id]="input.controlName"
          [required]="input.validators.required">
          <option value="">{{input.placeholder}}</option>
          <option *ngFor="let option of input.options" [value]="option.value">{{option.optionName}}</option>
        </select>
      </div>
        <div *ngIf="this.input.options.children > 0" class="form-group">
          <label [for]="input.options.optionName">{{input.options.optionName}}</label>
          <select [formOptionName]="input.options.children.childName" [name]="input.options.children.childName" [id]="input.options.children.childName">
          <option *ngFor="let children of input.options.children" [value]="children.value">{{children.childName}}</option>
        </select>
        </div>
      </ng-template>
export interface FormData {
  controlName: string;
  controlType: string;
  valueType?: string;
  currentValue?: string;
  placeholder?: string;
  options?: Array<{
    optionName: string;
    value: string;
    hasChildren: boolean;
    children: Array<{
      childName: string;
      childValue: string;
    }>
  }>;
  validators?: {
    required?: boolean;
    minlength?: number;
    maxlength?: number;
  };
}
import { FormData } from './../interface/form-data';

export const MockForm: FormData[] = [
  {
    controlName: 'Options',
    placeholder: 'Choose an option',
    controlType: 'select',
    options: [{
      optionName: 'Option 1',
      value: 'option 1',
      hasChildren: false,
      children: []
      },
      {
      optionName: 'Option 2',
      value: 'option 2',
      hasChildren: true,
      children: [{
        childName: 'Option 2A',
        childValue: 'option 2a',
        },
        {
        childName: 'Option 2B',
        childValue: 'option 2b'
        }],
      }],
    validators: {
      required: true
    }
  }
]