2

我正在尝试从我的 json 数据动态生成和使用表单控件。我想出一个简单的实验来弄清楚我需要应用的机制如下。

类中定义的变量

demoA: string         = 'name';
demoB: Array<string>  = ['city', 'state'];
demoC: FormGroup      = new FormGroup({});

demoA用于从and中获取属性demoB并转换为FomControls 的函数

loadStuff(){
    let a = this.demoA;
    let b = this.demoB;
    let ab: Array<string> = [];

    ab.push(a);
    b.forEach( bb => {ab.push(bb)} );
    console.log(ab);

    ab.forEach( ctrl => this.demoC.addControl(ctrl, new FormControl('')) );

    console.log( this.demoC.value );
}

现在的demoC值为

demoC: {name:'', city:'', state:''}

由于我在加载组件时动态创建它,因此我没有预定义的方式来绑定它,这让我想知道我是否可以在输入的绑定中绑定它,就像这样

<input type="text" [(ngModel)]="demoC.{{demoA}}" />

当然这没有用,也没有

<input type="text" [(ngModel)]="demoC.[demoA]" />

<input type="text" [(ngModel)]="demoC.[(demoA)]" />

<input type="text" [(ngModel)]="demoC.(demoA)" />

<input type="text" [(ngModel)]="(demoC)+'.'+(demoA)" />

<input type="text" [(ngModel)]="[(demoC)+'.'+{{demoA}}]" />

<input type="text" [(ngModel)]="('demoC.'+{{demoA}})" />

<input type="text" [(ngModel)]="['demoC.'+{{demoA}}]" />

<input type="text" [(ngModel)]="['demoC.'+[demoA]]" />

<input type="text" [(ngModel)]="[('demoC.')+[demoA]]">

如果我希望结果是demoC.name我该怎么做?

4

1 回答 1

1

为什么{{}}是语法?您可以简单地使用动态属性[(ngModel)]=demoC[demoA]的 thi 语法进行绑定。但是你在这里混合了两种方法简单形式方法与反应形式方法。如果您想使用,我认为使用指令而不是. 或者如果你想使用我认为你不需要使用它。FormGroupFormControlNamengModelngModelFormGroup

于 2017-09-29T03:22:54.470 回答