Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

135
Views
casillas de verificación angulares con matriz bidimensional

tengo una plantilla:

 <mat-card *ngFor="let cargo of cargos" class="cont-mat"> /*...*/ <form [formGroup]="cargoSignupForm" (submit)="onSignupForCargo(cargo.id)" *ngIf="!isLoading"> <p>Odaberite kamione s kojima želite izvršiti prijevoz - Težina robe: {{cargo.weight}} kg</p> <div *ngFor="let truck of (trucksByCargoId.get(cargo.id))"> <input type="checkbox" (change)="onChange(truck._id, $event.target.checked, cargo.id)">{{truck.regNumber}} </div> <input type="submit" value="GO" class="button-basic"> </form>

y 2 funciones componentes:

 truckFormArray = [[]]; ngOnInit() { /*...*/ this.cargoSignupForm = new FormGroup({ trucksId: this.fb.array([]) }); /*...*/ } onChange(truckId: string, isChecked: boolean, cargoId: string) { this.truckFormArray[cargoId] = <FormArray>this.cargoSignupForm.controls.trucksId; if (isChecked) { this.truckFormArray[cargoId].push(new FormControl(truckId)); } else { let index = this.truckFormArray[cargoId].controls.findIndex(x => x.value == truckId) this.truckFormArray[cargoId].removeAt(index); } } onSignupForCargo(cargoId: string) { console.log(this.truckFormArray[cargoId]); }

Solo quiero console_log(this.truckFormArray[cargoId]) . Debe haber un truckFormArray diferente para cada cargoId . Con esa solución, también obtengo trucksFormArray de las casillas de verificación anteriores de cargoId . Espero entiendas lo que quiero decir. En alguna parte es un pequeño error, pero también si crees que hay una mejor solución para hacerlo, eres bienvenido. Gracias por adelantado

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

truckFormArray debe ser un objeto

Es seguro asumir que cargoId no es un número que aumenta secuencialmente a partir de 0, por lo tanto, no tiene sentido declararlo como una matriz, sino declararlo como un objeto:

 truckFormArray = {};

Motivo : las matrices en Javascript siempre están indexadas por números que comienzan desde 0 y aumentan secuencialmente hasta el último índice.

truckFormArray no es un miembro de datos de la instancia de su objeto

Dado que no se inicializa como this.truckFormArray , no tiene this delante. Así que cambie todas las apariciones de this.truckFormArray a truckFormArray .

Motivo : siempre deberá ser coherente cuando se refiera a sus recursos.

Inicializando truckFormArray

Tú tienes

 this.truckFormArray[cargoId] = <FormArray>this.cargoSignupForm.controls.trucksId;

y parece ser incorrecto. Su trucksId parece ser un número e intenta asignarlo a un recurso que se trata como una matriz, por lo que hay una discrepancia de tipo. Si desea almacenar cada ID de trucksId en una matriz identificada por la carga que está presente en los camiones, debe presionar, pero solo si la casilla de verificación está marcada. Entonces, en lugar de lo anterior, necesitarás algo como esto:

 if (!truckFormArray[cargoId]) { //Here I created a JS array for the sake of simplicity, but you can //create a FormArray instance instead if that's more helpful for you this.truckFormArray[cargoId] = []; }

Motivo : si la matriz a la que debe hacer referencia aún no existe, debe crearla.

Resumen

Necesitaras

  • arreglar la inicialización de truckFormArray
  • asegúrese de referirlo de manera coherente con la forma en que se define
  • inicialice cada una de sus matrices de carga cuando sea necesario
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!