Error angular: "No se puede vincular a 'ngModel' ya que no es una propiedad conocida de 'input'"


296

Estoy usando Angular 4 y recibo un error en la consola:

No se puede vincular a 'ngModel' ya que no es una propiedad conocida de 'input'

¿Cómo puedo resolver esto?


28
Debe agregar FormsModuleal imports: []módulo donde lo usa ngModel. De lo contrario, publique su código.
Günter Zöchbauer

99
No puedo pensar que todos los nuevos desarrolladores de Angular 2 y 4 van a llegar a este problema exacto (incluido yo mismo). ¿Cuándo fue la última vez que usó Angular y no quiso usar ngModel en alguna parte? No entiendo por qué FormsModule no solo se incluye por defecto ...
Mike Gledhill

Por lo que vale, encontré este error en IONIC-4 (4.11.0) cuando trabajaba con Validación de formularios. Si no hago nada más que agregar formControlName = "myControl" a cualquier <ion-input> en cualquier parte del formulario, recibo el mensaje de error de enlace ngModel. Las propiedades alternativas, como formControlName1 = "myControl" no causan este error.
Memetican

Respuestas:


675

Para utilizar el enlace de datos bidireccional para las entradas de formulario, debe importar el FormsModulepaquete en su módulo angular.

import { FormsModule } from '@angular/forms';

@NgModule({
    imports: [
         FormsModule      
    ]

EDITAR

Como hay muchas preguntas duplicadas con el mismo problema, estoy mejorando esta respuesta.

Hay dos posibles razones

  • Falta FormsModule, por lo tanto, agregue esto a su módulo,

    import { FormsModule } from '@angular/forms';
    
    @NgModule({
        imports: [
            FormsModule      
        ]
  • Verifique la sintaxis / ortografía de [(ngModel)]en la etiqueta de entrada


27
¿Cuál es la relación entre ngModel y FormsModule? Sin embargo, esto no está funcionando para mí.
Govind

44
FormsModule proporciona directivas adicionales sobre los elementos del formulario, incluidos input, select, etc. Por eso es necesario. No olvide importar FormsModule en el mismo módulo que declara sus componentes que contienen enlaces de elementos de formulario.
Bob

1
¿Qué hacemos si estamos usando esto en un archivo ts componente?
Mike Warren

1
no debe importar dentro de component.ts
Sajeetharan

@Sajeetharan, ¿qué pasa si tengo una plantilla en mi Componente que usa ng-model en algún elemento de formulario?
CJBrew

18

Esta es una respuesta correcta. necesitas importar FormsMoudle

primero en app.module.ts

** **

import { BrowserModule } from '@angular/platform-browser';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { NgModule  } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
@NgModule({
  declarations: [
    AppComponent
  ],
  imports: [
    FormsModule,
    ReactiveFormsModule ,
    BrowserModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule { }

** segundo en app.component.spec.ts

import { TestBed, async } from '@angular/core/testing';
import { RouterTestingModule } from '@angular/router/testing';
import { AppComponent } from './app.component';
import { FormsModule } from '@angular/forms';
describe('AppComponent', () => {
  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [
        RouterTestingModule,
        FormsModule
      ],
      declarations: [
        AppComponent
      ],
    }).compileComponents();
  }));

Saludos y esperanza serán de gran ayuda.


¿Es necesario el segundo paso, alterar app.component.ts ?
Konrad Viltersten

9

Tu ngModelno funciona porque todavía no es parte de tu NgModule.

Debe indicar NgModuleque tiene autoridad para usar en ngModeltoda su aplicación. Puede hacerlo agregando FormsModulea su app.module.ts-> imports-> [].

import { FormsModule } from '@angular/forms';

@NgModule({

   imports: [ FormsModule ],       // HERE

   declarations: [ AppComponent ],
   bootstrap: [ AppComponent ]
 })

7

Me encontré con este error al probar mi aplicación Angular 6 con Karma / Jasmine. Ya había importado FormsModuleen mi módulo de nivel superior. Pero cuando agregué un nuevo componente que usaba [(ngModel)]mis pruebas comenzó a fallar. En este caso, necesitaba importar FormsModuleen mi TestBed TestingModule.

beforeEach(async(() => {
  TestBed.configureTestingModule({
    imports: [
      FormsModule
    ],
    declarations: [
      RegisterComponent
    ]
  })
  .compileComponents();
}));

5

Todas las soluciones al problema mencionadas anteriormente son correctas. Pero si está utilizando la carga diferida, FormsModuledebe importarse en el módulo secundario que tiene formularios. Agregarlo app.module.tsno ayudará.


4

En app.module.tsagregar esto:

import { FormsModule, ReactiveFormsModule } from '@angular/forms';

@NgModule({
    declarations: [AppComponent],
    imports: [FormsModule],
})

66
¿Qué valor adicional agrega esta respuesta a las respuestas existentes?
Günter Zöchbauer

44
no agrega ningún valor a la respuesta y el formato del código es incorrecto. Confuso para begineer.
ssmsnet

3
Si bien este fragmento de código puede resolver la pregunta, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no saber los motivos de su sugerencia de código.
Clijsters

3

ingrese la descripción de la imagen aquíIntenté todo lo mencionado anteriormente, pero aún así no funciona.

pero finalmente encontré el problema en el sitio angular. Intente importar formModule en module.ts eso es todo. ingrese la descripción de la imagen aquí


2

Intenta agregar

ngModel en el nivel del módulo

El código es el mismo que el anterior.


2

Actualice con Angular 7.xx , encuentre el mismo problema en uno de mis módulos .

Si se encuentra en su módulo independiente, agregue estos módulos adicionales:

import { CommonModule } from "@angular/common";
import { FormsModule } from "@angular/forms";

@NgModule({
  imports: [CommonModule, FormsModule], // the order can be random now;
  ...
})

Si se encuentra en su app.module.ts, agregue estos módulos:

import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';

@NgModule({
  imports:      [ FormsModule, BrowserModule ], // order can be random now
  ...
})

Una demostración simple para probar el caso.


2

La respuesta para mí fue una ortografía incorrecta ngModel. Lo tenía escrito así: ngModulemientras debería ser ngModel.

Todos los otros intentos obviamente no pudieron resolver el error por mí.


Sí, esto también me pasó a mí ... ¡Modelo! = Módulo ¡Por qué eso no entra en mi cerebro!
Rahul Sonwanshi

1

import { FormsModule } from '@angular/forms'; // <<<< importalo aqui

BrowserModule, FormsModule // <<<< y aquí

Así que simplemente busca app.module.tsu otro archivo de módulo y asegúrate de haber FormsModuleimportado en ...


1

En mi caso, agregué la importación que faltaba, que era ReactiveFormsModule.


1

módulo de formulario de importación en app.module.ts.

import { FormsModule} from '@angular/forms';


@NgModule({
  declarations: [
    AppComponent,
    ContactsComponent
  ],
  imports: [
    BrowserModule,HttpModule,FormsModule     //Add here form  module
  ],
  providers: [],
  bootstrap: [AppComponent]
})

En html:

<input type="text" name="last_name" [(ngModel)]="last_name" [ngModelOptions]="{standalone: true}" class="form-control">

Utilicé el formulario en html, e importé el módulo de formularios en app.madule.ts like- import {FormsModule} de '@ angular / forms', y agregué ese FormsModule en las importaciones.
Brahmmeswara Rao Palepu

1

En mi caso escribí mal, me refería a ngmodel en lugar de ng M odel :) ¡Espero que ayude!

Esperado - [(ngModel)] Actual - [(ngmodel)]


1

Debe verificar lo siguiente si el enlace bidireccional no funciona.

En html, el ngModel debería llamarse de esta manera. No hay dependencia en otro atributo del elemento de entrada

<input [(ngModel)]="inputText">

Asegúrese de que FormsModule se importe al archivo de módulos app.modules.ts

import { FormsModule } from '@angular/forms';

@NgModule({
    declarations: [
        AppComponent,
        HomeComponent // suppose, this is the component in which you are trying to use two ay binding
    ],
    imports: [
        BrowserModule,
        FormsModule,
        // other modules
],
    providers: [],
    bootstrap: [AppComponent]
})
export class AppModule { }

Asegúrese de que el componente en el que está intentando utilizar ngModel para el enlace bidireccional se agregue en las declaraciones de. Código agregado en el punto anterior # 2

Esto es todo lo que necesita hacer para que el enlace bidireccional funcione con ngModel, esto se valida hasta angular 9


0

Si desea utilizar el enlace de datos bidireccional para las entradas de formulario, debe importar el paquete FormsModule en su módulo angular. Para obtener más información, consulte el tutorial oficial de Angular 2 aquí y la documentación oficial para formularios

en app.module.ts agregue las siguientes líneas:

import { FormsModule } from '@angular/forms';

[...]

@NgModule({
  imports: [
    [...]
    FormsModule
  ],
  [...]
})

0

primero importe FormsModule y luego use ngModel en su component.ts

import { FormsModule } from '@angular/forms';

@NgModule({
 imports: [ 
            FormsModule  
          ];

Código HTML:

<input type='text' [(ngModel)] ="usertext" />

0

Si incluso después de importar el módulo de formularios el problema persiste, verifique que su Entrada no tenga un atributo "nombre" con un valor igual a otra entrada en la página.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.