【发布时间】:2017-11-26 06:07:12
【问题描述】:
我一直在尝试将我的 Angular HTML 模板中的表单数据绑定到我的组件中的接口。
我一直在学习下面的教程,但是我的 FormGroup 并没有像教程那样自动投射到后端的界面。
我的代码如下:
组件
import { Component, OnInit } from "@angular/core";
import { FormGroup, FormBuilder, FormArray, FormControl, Validators } from "@angular/forms";
import { DeckBuildRequest } from "../domain-models/interfaces/deckBuildRequest.interface";
@Component({
selector: "deck-options",
templateUrl: "./deck-options.component.html",
styleUrls: ["./deck-options.component.css"]
})
export class DeckOptionsComponent {
private deckBuildRequest: FormGroup;
constructor(formBuilder: FormBuilder) {
this.deckBuildRequest = formBuilder.group({
"deckSize": 60,
"deckColors": formBuilder.array([
{color: "Blue", checked: false},
{color: "Green", checked: false},
{color: "Red", checked: false},
{color: "White", checked: false},
{color: "Black", checked: false},
{color: "Colorless", checked: false}
])
});
}
GenerateDeck(request: DeckBuildRequest) {
alert(request.deckSize);
}
}
HTML
<div id="deck-options">
<form [formGroup]="deckBuildRequest"
(ngSubmit)="GenerateDeck(deckBuildRequest)">
<span>
<label><input formControlName="deckSize" type="number" max="100" min="1">Number of Cards</label>
</span>
<div>
<label [attr.for]="'color'+i"
*ngFor="let colorOption of deckBuildRequest.controls['deckColors'].controls, let i = index"
>
<input
type="checkbox"
id="color{{i}}"
value="{{colorOption.value.color}}"
ng-checked="colorOption.value.checked"
/>
{{colorOption.value.color}}
</label>
</div>
<button type="submit">Generate Deck!</button>
</form>
</div>
界面
export interface DeckBuildRequest {
deckSize: number;
deckColors: [{
color: string;
checked: boolean;
}];
}
我在这里错过了什么?
【问题讨论】:
-
“我一直在学习下面的教程,但是我的 FormGroup 并没有像教程那样自动转换到后端的界面。”。我不明白这是什么意思......事实上,有什么问题?另外,
ng-checked是什么? -
@developer033 - 据我所知,您可以通过触发 OnSubmit(..) 调用,将 View (HTML) 提供的表单结构隐式映射回控制器端(组件),传递您的表单作为参数,并通过接口在控制器端使用它。这是正确的还是我不在基地?
ng-checked正在强制将复选框设置为在开始时取消选中。
标签: typescript angular2-template angular2-forms