UIを更新していない私は
をしたい私は機能入力と製品の反応性形を作るしようとしています"@angular/cli": "1.2.6"
、"@angular/core": "^4.0.0"
選択ボックスはここで後の反応性フォームのコントロールを削除
を使用しています。フォーム内で、「機能を追加」ボタンをクリックすると、「タイプ」の選択ボックスを含む新しい機能列が表示されます。ユーザーが機能列内の「削除」ボタンをクリックすると、その機能列が削除されます。
何の問題私はこの問題は、私が最初と最後の特徴列間における特徴列を削除しようとすると、formControlが正常に正しい値で更新されている
に会いました。ただし、削除された機能列の選択ボックスのUIは、今後の次の機能列に移行します。
私がターゲット特徴列が削除されると
を持つことを期待何を、今後の機能の欄のUIは、正しい値で上がるだろう。
サンプル
1. 2番目のフィーチャの列を削除しようとしています。 2. formControlは2番目の機能を正常に削除しました。 UIの2番目の機能列が正常に削除されました。ただし、3番目のフィーチャの列は上に移動し、スペースを削除されたフィーチャの選択ボックスの値に置き換えます。
私のコードは次の通りである:
製品-form.component.ts
formDOM;
features = [];
featureTypes = [
{ id: "pros", name: "pros" },
{ id: "cons", name: "cons" }];
ngOnInit() {
this.formDOM = this.formBuilder.group({
// Have other field....
feature: this.formBuilder.array([])
});
}
patchSingleFeature(feature: object): FormGroup {
let returnObject = this.formBuilder.group({
type: (feature && feature['type'])
// some other field also....
});
this.features.push("feature");
return returnObject;
}
addFeature(): void {
let featureControl = <FormArray>this.formDOM.controls['feature'];
featureControl.push(this.patchSingleFeature(new Feature()));
}
removeFeature(x: number): void {
let numberOfFeature = this.features.length;
let featureControl = <FormArray>this.formDOM.controls['feature'];
featureControl.controls.splice(x, 1);
this.features.splice(x, 1);
}
製品-form.component.html
<div class="form" [formGroup]="formDOM">
<div class="col-xs-12">Features</div>
<div *ngFor="let feature of features; let x = index; ">
<feature-input [x]="x" [featureTypes]="featureTypes" [form]="formDOM" (clickEvent)="removeFeature($event)"></feature-input>
</div>
<button (click)="addFeature()">Add Feature</button>
</div>
機能-input.component.html
<div class="feature-input" [formGroup]="form">
<div formArrayName="feature">
<div [formGroupName]="x">
<select formControlName="type">
<option value="" disabled>-- Select Feature Type --</option>
<option *ngFor="let type of featureTypes" [value]="type.id">{{ type.name }}</option>
</select>
</div>
</div>
</div>
機能-input.component.ts
@Input() form: FormGroup;
@Input() featureTypes: Array<object>;
@Input() x: number;
@Output() clickEvent new EventEmitter<number>();
removeFeature(x) { this.clickEvent.emit(x); }
ありがとう!それは完全に動作します。私のコードの問題は何か分かりますか? –
さて、 'features'配列を使って、あなたは奇妙なことが起こっています。実際にはformarrayではなく 'features'配列からアイテムを削除していますので、それは 'それを台無しにする'ことです。あなたは 'features'配列をまったく必要としないので、なぜあなたがそれを使用しているのか分かりません:) – Alex
私は今それを得ました:P説明をありがとう:)あなたの答えを読んだ後、 '機能'は役に立たない、笑 –