No se puede encontrar el control con el atributo de nombre no especificado en el constructor de la forma angular 6

votos
1

Tengo este mensaje de error al intentar actualizar el vector de la red con el archivo HTML.

Aquí he utilizado los datos estáticos de la tabla para mostrar e importado de otro componente que muestra la tabla primeng y he añadido un botón de actualización con una función que redirige a otra página para la actualización de los datos.

El problema se ve en la primera línea en el archivo HTML es decir; [FormGroup] = myvehicle

He tratado de comprobar con un nombre de grupo de forma diferente, pero sigue siendo el problema es el mismo.

import { Component, OnInit } from '@angular/core';
import {Router, ActivatedRoute, Params} from '@angular/router';
import { FormBuilder, FormGroup } from '@angular/forms';

@Component({
  selector: 'app-crud',
  templateUrl: './crud.component.html',
})
export class CrudComponent implements OnInit {
  myvehicle: FormGroup;
  display: boolean;
  id: number;
  vin: any;
  year: number;
  brand: string;
  color: string;
  vehicle: any;
  Data: any;

  constructor(private activatedRoute: ActivatedRoute, private fb: FormBuilder) {
   }

  ngOnInit() {
    this.myvehicle = this.fb.group({
    vin: [''],
    year: [''],
    brand: [''],
    color: ['']
  });
    this.vehicle = [
      {
       id: 1 , vin: 'dsad231ff' , year : 2012 , brand: 'VW' , color: 'Orange'
      },
      {
        id: 2 , vin: 'gwregre345' , year : 2011 , brand: 'Audi' , color: 'Black'
      },
      {
        id: 3 , vin: 'h354htr' , year : 2005 , brand: 'Renault' , color: 'Gray'
      },
      {
        id: 4, vin: 'j6w54qgh' , year : 2003 , brand: 'BMW', color: 'Blue'
      },
      {
        id: 5, vin: 'hrtwy34' , year : 1995 , brand: 'Mercedes' , color: 'Orange'
      }
    ];
    debugger
    this.activatedRoute.paramMap
    .subscribe( params => {
    this.id = +params.get('id');
    });

      this.vehicle.forEach(element => {
        if (element.id === this.id) {
            this.Data = element;
              }
      });
      this.myvehicle.patchValue({
        vin: this.Data.vin,
        year: this.Data.year,
        brand: this.Data.brand,
        color:  this.Data.color
      });
  }

}
<form [formGroup]=myvehicle>
<label >Vin:</label>
<input type=text [formControlName]=vin ><br><br>
<label >Year:</label>
<input type=text [formControlName]=year ><br><br>
<label >Brand:</label>
<input type=text [formControlName]=brand ><br><br>
<label >Color:</label>
<input type=text [formControlName]=color ><br><br>
</form>

Publicado el 18/12/2018 a las 11:05
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Creo que el problema principal es aquí

<input type="text" [formControlName]="vin" ><br><br>

que tratar de pasar una variable vacía

vin: any;

como nombre de control, esto se puede solucionar de esta manera:

<input type="text" formControlName="vin" ><br><br>

basta con retirar los corchetes y el nombre del conjunto de control como cadena.

se debería solucionar el problema.

También, esta parte

  this.activatedRoute.paramMap
.subscribe( params => {
this.id = +params.get('id');
});

  this.vehicle.forEach(element => {
    if (element.id === this.id) {
        this.Data = element;
          }
  });
  this.myvehicle.patchValue({
    vin: this.Data.vin,
    year: this.Data.year,
    brand: this.Data.brand,
    color:  this.Data.color
  });

puede simplificarse

    this.activatedRoute.paramMap
  .subscribe(params => {
    const id = params.get('id');

    if (this.vehicle[id]) {
      this.myvehicle.patchValue(this.vehicle[id]);
    }
  });

patchValue aquí sólo se ejecuta cuando se tiene un identificador correcto en parametros del router

Respondida el 18/12/2018 a las 17:03
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more