Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.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
Html 角度反应形式-数组值的动态构建(基于迭代隐藏和显示值)_Html_Angular_Angular Reactive Forms_Angular Forms_Angular Formbuilder - Fatal编程技术网

Html 角度反应形式-数组值的动态构建(基于迭代隐藏和显示值)

Html 角度反应形式-数组值的动态构建(基于迭代隐藏和显示值),html,angular,angular-reactive-forms,angular-forms,angular-formbuilder,Html,Angular,Angular Reactive Forms,Angular Forms,Angular Formbuilder,我需要根据以下格式JSON填充值 "days": [ { "date": "2020-09-21T09:00:04.206+00:00", "nodes": [ { "type": "leg", "from": "airport&

我需要根据以下格式JSON填充值

    "days": [
      {
        "date": "2020-09-21T09:00:04.206+00:00",
        "nodes": [
          {
            "type": "leg",
            "from": "airport",
            "to": "oshiage station",
            "cost": 1170
          },
         {
            "type": "activity",
            "category": "food",
            "cost": 200,
            "location": "ramen place"
          }
          {
            "type": "activity",
            "category": "food",
            "cost": 2000,
            "location": "soup curry restaurant",
          },      
        ]
      }
    ]
表单中还有单独的按钮,如“添加腿”和“添加活动”

我无法分别控制这两种类型的节点,因此我决定在添加活动时隐藏leg属性的div类,在添加leg时隐藏活动,最后在发送到服务器之前删除空值,以便以受尊重的JSON格式获取它

但是,我无法实现迭代表单的显示和隐藏行为。 单击“活动”按钮时,将为第一次迭代填充“活动”表单,当我想在单击按钮后添加支腿值时,也将填充上一次迭代中隐藏的支腿值

是否有任何方法可以根据迭代隐藏和显示值

示例.ts文件:

  form: FormGroup;
  bubbleActivity:any;
  bubbleTravel:any;
 addTravel(ix){
    this.bubbleTravel = true;
    const control = (<FormArray>this.form.controls['days']).at(ix).get('nodes') as FormArray;
    control.push(
        this.fb.group({
            type: 'leg',
            from: '',
            to: '',
            cost:'',
            category: null,
            costActivity: null,
            location:null,
          })
    )
  }
addActivity(ix) {
    this.bubbleActivity = true;
    const control = (<FormArray>this.form.controls['days']).at(ix).get('nodes') as FormArray;
    control.push
    (
        this.fb.group({
            type: 'activity',
            from: null,
            to: null,
            cost:null,
            category: '',
            costActivity: '',
            location:'',
          })
    )
  }
形式:FormGroup;
起泡性:任何;
泡泡旅行:任何;
addTravel(九){
this.bubbleTravel=true;
const control=(this.form.controls['days'])。at(ix.get('nodes')作为FormArray;
控制按钮(
本集团({
类型:'腿',
从:“”,
至:'',
成本:'',
类别:空,
costActivity:null,
位置:空,
})
)
}
补充活动(九){
this.bubbleActivity=true;
const control=(this.form.controls['days'])。at(ix.get('nodes')作为FormArray;
控制按钮
(
本集团({
类型:“活动”,
from:null,
至:空,
成本:空,
类别:“”,
成本活动:“”,
位置:“”,
})
)
}

期望: 如果我为前两个迭代添加活动,然后单击leg按钮,我希望只在第三个迭代中显示leg,而不在前两个迭代中显示。继续,如果我点击活动按钮,应该是第四次迭代。基本上是试图在同一个阵列上实现单独的控制


请建议您是否找到其他替代方案。

或者,您可以将表格分成两部分。使用有条件渲染的div包装表单片段。使用
类型
作为条件提供程序,如下所示:

<div *ngIf="Y.value.type === 'leg'">
 <!-- leg  form controls here -->
</div>
<div *ngIf="Y.value.type === 'activity'">
 <!-- activity form controls here -->
</div>

并且不要用空值初始化表单