非常に特殊なユーザーケースでアプリケーションが誤動作するという非常に奇妙な問題が発生しました。ユーザーが質問と回答を追加して編集できるポータルがあります。この場合、set(q + a)を削除してから追加しようとすると、モデルは更新されますが、ビューはプレースホルダーから値を取得し、それ自体を更新します。ここでは、配列の値をスプライスしてプッシュし、ngForを使用してレンダリングしています。最後の要素はダミーであり、押し上げられる値を入力するために使用されます。
意味がある場合はスクリーンショットを添付してください。
テキストボックスの場合、ng-reflect-modelは正しい質問を示していますが、要素自体はプレースホルダーテキストを表示しています。
Angularが配列の要素を適切に追跡できなかったため、問題が発生しているようです。これは非常に難しい方法であることがわかりました。したがって、ngByにtrackBy属性を追加するだけで、これを解決することができます。
これを私のコンポーネントに追加しました:
customTrackBy(index: number, obj: any): any {
return index;
}
そしてテンプレートで:
<div class="margin-bottom-15"
*ngFor="let assessment of language.assessments; trackBy:customTrackBy">
だから私は基本的にangular=配列内の要素をインデックスで追跡するように求めています。それで問題は解決しました。
ここでの評価は、質問と回答の各セットのモデルです。
ネストされたngForを使用している場合、名前属性は一意ではない可能性があります。一意である必要があります。したがって、一意にするために、forループのインデックスを持つ接尾辞name属性。
<form #f="ngForm" validate>
<div *ngFor="childItem of parentArray; index as pIndex;">
<div *ngFor="childArray of childItem.parameters;index as cIndex;">
First Name: <input name="childArray-{{pIndex+''+cIndex}}"
type="text" [(ngModel)]="childArray.firstname" required>
Last Name: <input name="childArray-{{pIndex+''+cIndex}}"
type="text" [(ngModel)]="childArray.lastname" required>
<button type="button" [disabled]="!f.valid"
(click)="submitForm();"> Submit </button>
</div>
</div>
</form>
他にあなたは使うことができます
*ngFor="childItem of parentArray; index as i;"
そして
[attr.data-target]="'#test' + i"
そして
name="test{{i}}