tablas pasar parametros otro formularios entre datos comunicacion componentes componente angular angular4-forms

otro - pasar parametros entre componentes angular 4



Angular4: sin valor de acceso para el control de formulario (2)

Creo que debe usar formControlName="surveyType" en una input y no en un div

Tengo un elemento personalizado:

<div formControlName="surveyType"> <div *ngFor="let type of surveyTypes" (click)="onSelectType(type)" [class.selected]="type === selectedType"> <md-icon>{{ type.icon }}</md-icon> <span>{{ type.description }}</span> </div> </div>

Cuando trato de agregar el formControlName, recibo un mensaje de error:

Error de ERROR: sin valor de acceso para el control de formulario con el nombre: ''surveyType''

Traté de agregar ngDefaultControl sin éxito. Parece que es porque no hay entrada / selección ... y no sé qué hacer.

Me gustaría vincular mi clic a este formularioControl para que cuando alguien haga clic en toda la tarjeta que empuje mi ''tipo'' en el formularioControl. ¿Es posible?


Puede usar formControlName solo en directivas que implementan ControlValueAccessor .

Implementar la interfaz

Entonces, para hacer lo que desea, debe crear un componente que implemente ControlValueAccessor , lo que significa implementar las siguientes tres funciones :

  • writeValue (le dice a Angular cómo escribir el valor del modelo a la vista)
  • registerOnChange (registra una función de controlador que se llama cuando cambia la vista)
  • registerOnTouched (registra un controlador que se llamará cuando el componente recibe un evento táctil, útil para saber si el componente se ha enfocado).

Registrar un proveedor

Luego, debe decirle a Angular que esta directiva es un ControlValueAccessor (la interfaz no lo cortará, ya que se elimina del código cuando TypeScript se compila en JavaScript). Para ello, debe registrar un proveedor .

El proveedor debe proporcionar NG_VALUE_ACCESSOR y usar un valor existente . También necesitarás un forwardRef aquí. Tenga en cuenta que NG_VALUE_ACCESSOR debe ser un proveedor múltiple .

Por ejemplo, si su directiva personalizada se llama MyControlComponent, debe agregar algo en las siguientes líneas dentro del objeto pasado al decorador @Component :

ERROR Error: No value accessor for form control with name: ''surveyType''

Uso

Su componente está listo para ser utilizado. Con los formularios basados ​​en plantillas , el enlace ngModel ahora funcionará correctamente.

Con formularios reactivos , ahora puede usar adecuadamente formControlName y el control de formulario se comportará como se esperaba.

Recursos