动态表单单例吗?

时间:2019-01-20 12:50:29

标签: angular forms dynamic angular7

我试图以角度理解动态表单部分,但不确定自己是否正确理解。

例如:我用表单控件构建一个表单组,然后通过输入将其发送到另一个组件。

dynamic-form-component.html:

<div>
    <form (ngSubmit)="onSubmit()" [formGroup]="form">
        <div *ngFor="let question of questions" class="form-row">
            <app-question [question]="question" [form]="form"></app-question>
        </div>

        <div class="form-row">
            <button type="submit" [disabled]="!form.valid">Save</button>
        </div>
    </form>

    <div *ngIf="payLoad" class="form-row">
        <strong>Saved the following values</strong><br>{{payLoad}}
    </div>
</div>

dynamic-form.component.ts:

   onSubmit() {
    this.payLoad = JSON.stringify(this.form.value);
  }

在app-question组件中,此表单将被更改,这意味着字段将填充用户选择的数据选项。

当他完成操作时,用户将被按“保存”,如何更新数据?我的意思是我不需要将值发送回父组件? (从app-question> dynamic-form发送新表单数据)表单是单例服务吗?因此,子组件内部的每项更改也要在父表单中进行更改吗?

1 个答案:

答案 0 :(得分:0)

Roberto,当您使用@Input且输入是一个对象时,您无需使用输出,因为您传递了该对象的“引用”。

一个愚蠢的例子

父母

@Component({
  selector: 'my-app',
  template: `
  <child [object]="object"></child>
  {{object|json}}` //<--after 1 seconds you can see { "property1": 1, "property2": 3 }
})
export class AppComponent {
  object={property1:1,property2:2}
}

孩子

@Component({
  selector: 'child',
  template: `child`
})
export class HelloComponent implements OnInit  {
  @Input() name: any;
  ngOnInit()
  {
     setTimeout(()=>{
        this.name.property2=3
     },1000)
  }
}

通过app-question作为@Input“ form”和“ question”输入。这是因为应用程序上的更改会更改表单:这是相同的控件! (不是因为形式有点像“ singelton”)