Cuando edito un formulario, obtengo 3 valores diferentes en console.log, pero se muestra el mismo valor en el cuadro de texto utilizando la función de autocompletar de mat en Angular 7.
Cuando edito mi formulario, obtengo 3 valores diferentes en la consola. Pero en el cuadro de texto muestra el mismo valor. Estoy usando el autocompletado “mat” y creando un cuadro de texto dinámico.
“`typescript
for (let i=0,j=1,k=0; i < this.filters<em>val.chordArray; i++) {<br>
this.filters.vos</em>tag[i] = this.response['USM<em>VOS'+(k.toString()+j.toString()).slice(-2)];
alert(this.filters.vos</em>tag[i])<br>
this.filters.vog<em>tag[i] = this.response['USM</em>VOG'+(k.toString()+j.toString()).slice(-2)];
this.filters.perf<em>tag[i] = this.response['USM</em>PERF'+(k.toString()+j.toString()).slice(-2)];
this.filters.agc<em>desc[i] = this.response['USM</em>AGC<em>LEV'+(k.toString()+j.toString()).slice(-2)+'AB'];
this.filters.agc</em>tag[i] = this.response['USM<em>AGC</em>LEV'+(k.toString()+j.toString()).slice(-2)+'BA'];
this.filters.agclimit<em>desc[i] = this.response['USM</em>AGC<em>LIM'+(k.toString()+j.toString()).slice(-2)+'AB'];
this.filters.agclimit</em>tag[i] = this.response['USM<em>AGC</em>LIM'+(k.toString()+j.toString()).slice(-2)+'BA'];
this.filters.snr<em>desc[i] = this.response['USM</em>SNR'+(k.toString()+j.toString()).slice(-2)+'AB'];
this.filters.snr<em>tag[i] = this.response['USM</em>SNR'+(k.toString()+j.toString()).slice(-2)+'BA'];<br>
j++;<br>
console.log("JSON =>", this.filters.vos_tag[i]);<br>
}
this.loadTextBox();
“`
html
<div *ngFor="let option of options; index as idx">
<label>PATH {{idx+1}}:</label>
<mat-form-field>
<input #fy1 (keyup)="onKeyPress(fy1?.value)" type="text" [(ngModel)]="filters.vos_tag[idx]" matInput [formControl]="myControl19" [matAutocomplete]="sss">
<mat-autocomplete #sss="matAutocomplete">
<mat-option *ngFor="let opt of configfilteredOptions19 | async" [value]="opt.name">
{{opt.name}}
</mat-option>
</mat-autocomplete>
</mat-form-field>
</div>
descripción de la imagen
davy.ai
Según el código y la captura de pantalla proporcionados, parece que el problema está con la vinculación ngModel en los cuadros de texto dinámicos. El bucle for itera sobre una matriz de objetos y asigna valores a las propiedades del objeto
this.filters
. Luego, los cuadros de texto en el código HTML están vinculados a estas propiedades usando ngModel, por lo que sus valores iniciales se llenan correctamente. Sin embargo, cuando un usuario edita un cuadro de texto, la vinculación ngModel actualiza la propiedad correspondiente, lo que hace que las declaraciones console.log impriman valores diferentes para el mismo cuadro de texto.Para resolver este problema, debemos asegurarnos de que los cuadros de texto en el código HTML estén correctamente vinculados a los objetos en la matriz
this.filters
. Una forma de hacer esto es usar trackBy en el bucle ngFor para identificar cada objeto por su índice, de esta manera:Observa cómo estamos utilizando
let filter of filters
para iterar sobre la matrizthis.filters
, y cómo estamos vinculando cada cuadro de texto a la propiedadvos_tag
del objetofilter
actual. También estamos utilizando una funcióntrackByFn
para identificar cada objeto por su índice:Al hacer esto, aseguramos que cada cuadro de texto esté vinculado al objeto correcto en la matriz, y que editar un cuadro de texto solo actualice la propiedad correspondiente de ese objeto. Esto debería eliminar el problema de obtener valores diferentes en la consola para el mismo cuadro de texto.