Angular 2 Forms - 在子组件级别分配ngControl

时间:2016-01-03 14:42:43

标签: angular angular2-forms

以Angular 2形式, 试图通过ngSubmit获取数据。 我可以在我的表单组件中同时分配ngModel和ngControl属性而没有问题,但是在子组件MyInput中,我无法在没有"没有提供程序错误的情况下分配ngControl"。 Plunker http://plnkr.co/edit/LauhEz6vMaEmIg0hceoj?p=preview

    directives: [CORE_DIRECTIVES, FORM_DIRECTIVES, MyInput],
template: ` <div>
                <form #hf="ngForm" (ngSubmit)="onSubmit(hf.value)">
                    <div>
                      In Form: <input type='text' [ngControl]="inform" [(ngModel)]="theValue" [required]="req" #spy >
                      <br>Classes: {{spy.className}}
                      <br>
                      <br>In Component: <my-input [props]='prop'></my-input>
                      <br>In Component: <my-input [props]='prop2'></my-input>
                    </div>
                    <button type="submit" [hidden] = "!editing">Save</button>
                    <button type="button" (click)="cancelClick()" [hidden] = "!editing">Cancel</button>
                    <button type="button" (click)="setEdit(true)" [hidden] = "editing">Edit</button>
                </form>
                Form Values {{data}}
           </div>
            `

子组件模板:

@Component({
selector: 'my-input',
directives: [FORM_DIRECTIVES],
template: ` 
            <input type='text'
              [(ngModel)]="props.Value"

如果我添加此

时出错
 [ngControl]="props.id"  

我需要从表单传递给Sub Component吗?

2 个答案:

答案 0 :(得分:1)

在ngControl绑定/执行时,prop不可用是不是一个问题...如果你在组件中提供了一个默认控件,然后对{{1}中的那个进行了引用,那该怎么办?在props中,当道具真正可用时执行。

答案 1 :(得分:0)

更新:使用此方法,父表单无法根据子组件的有效性确定其有效性。

作为一种解决方法,您可以尝试将子组件包装在其自己的表单元素中。

@Component({
  selector: 'my-input',
  directives: [FORM_DIRECTIVES],
  template: ` 
      <form> <--------------
        <input type='text'
          [(ngModel)]="props.Value"
          [ngControl]="props.id"  />
      </form>

不理想,但这是我在不使用动态表单的情况下使用子组件撰写表单的唯一方法https://angular.io/docs/ts/latest/cookbook/dynamic-form.html