Ответ 1
Да, что это, в app.module.ts, я просто добавил:
import { FormsModule } from '@angular/forms';
[...]
@NgModule({
imports: [
[...]
FormsModule
],
[...]
})
Я получил следующую ошибку при запуске моего приложения Angular, даже если компонент не отображается.
Я должен закомментировать <input>
чтобы мое приложение работало.
zone.js:461 Unhandled Promise rejection: Template parse errors:
Can't bind to 'ngModel' since it isn't a known property of 'input'. ("
<div>
<label>Created:</label>
<input type="text" [ERROR ->][(ngModel)]="test" placeholder="foo" />
</div>
</div>"): [email protected]:28 ; Zone: <root> ; Task: Promise.then ; Value:
Я смотрю на героя, но не вижу никаких отличий от моего кода.
Вот файл компонента:
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { Intervention } from '../../model/intervention';
@Component({
selector: 'intervention-details',
templateUrl: 'app/intervention/details/intervention.details.html',
styleUrls: ['app/intervention/details/intervention.details.css']
})
export class InterventionDetails
{
@Input() intervention: Intervention;
public test : string = "toto";
}
Да, что это, в app.module.ts, я просто добавил:
import { FormsModule } from '@angular/forms';
[...]
@NgModule({
imports: [
[...]
FormsModule
],
[...]
})
Чтобы иметь возможность использовать двустороннюю привязку данных для входных данных формы, вам нужно импортировать пакет FormsModule
в ваш модуль Angular
.
Для получения дополнительной информации см. Официальный Angular 2
учебник здесь и официальную документацию для forms
Для использования [(ngModel)]
в Angular 2, 4 и 5+ необходимо импортировать FormsModule из угловой формы...
Также в этом пути под формами в Angular Repo в GitHub:
угловой/пакеты/формы/src/директивы/ng_model.ts
Вероятно, это не очень приятно для разработчиков AngularJs, так как вы могли бы использовать ng-модель везде в любое время, но поскольку Angular пытается разделить модули, чтобы использовать то, что вы хотите использовать в данный момент, ngModel сейчас находится в FormsModule,
Также, если вы используете ReactiveFormsModule, необходимо импортировать его тоже.
Просто найдите app.module.ts и убедитесь, что FormsModule
импортирован в...
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms'; //<<<< import it here
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule, FormsModule //<<<< and here
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
Также это текущие начальные комментарии для Angular4 ngModel
в FormsModule:
/**
* 'ngModel' forces an additional change detection run when its inputs change:
* E.g.:
* '''
* <div>{{myModel.valid}}</div>
* <input [(ngModel)]="myValue" #myModel="ngModel">
* '''
* I.e. 'ngModel' can export itself on the element and then be used in the template.
* Normally, this would result in expressions before the 'input' that use the exported directive
* to have and old value as they have been
* dirty checked before. As this is a very common case for 'ngModel', we added this second change
* detection run.
*
* Notes:
* - this is just one extra run no matter how many 'ngModel' have been changed.
* - this is a general problem when using 'exportAs' for directives!
*/
Если вы хотите использовать свой ввод, а не в форме, вы можете использовать его с ngModelOptions
и сделать автономным true...
[ngModelOptions]="{standalone: true}"
Для получения дополнительной информации, посмотрите на ng_model в разделе Angular здесь
Вам необходимо импортировать FormsModule
Откройте приложение app.module.ts
и добавить строку
import { FormsModule } from '@angular/forms';
а также
@NgModule({
imports: [
FormsModule
],
})
В этом может помочь кто-то.
Предполагая, что вы создали новый NgModule, скажем AuthModule
, посвященный обработке ваших потребностей Auth, обязательно импортируйте FormsModule
в этот AuthModule тоже.
Если вы используете FormsModule
ТОЛЬКО в AuthModule
, тогда вам не нужно будет импортировать FormModule
IN по умолчанию AppModule
Итак, что-то вроде этого в AuthModule
:
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { authRouting } from './auth.routing';
import { LoginComponent, SignupComponent } from './auth.component';
@NgModule({
imports: [
authRouting,
FormsModule
],
declarations: [
SignupComponent,
LoginComponent
]
})
export class AuthModule { }
Затем забудьте об импорте в AppModule
, если вы не используете FormsModule
где-либо еще.
Для устранения этой ошибки необходимо выполнить два шага
в основном app.module.ts должен выглядеть следующим образом:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
import {AppChildComponent} from './appchild.component';
@NgModule({
imports: [ BrowserModule,FormsModule ],
declarations: [ AppComponent, AppChildComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Надеюсь, что это поможет
Простое Soultion: в app.module.ts
Пример 1
import {FormsModule} from "@angular/forms";
// add in imports
imports: [
BrowserModule,
FormsModule
],
Пример 2
Если вы хотите использовать [(ngModel)], вы должны импортировать FormsModule в app.module.ts
import { FormsModule } from "@angular/forms";
@NgModule({
declarations: [
AppComponent, videoComponent, tagDirective,
],
imports: [
BrowserModule, FormsModule
],
providers: [ApiServices],
bootstrap: [AppComponent]
})
export class AppModule { }
Вам необходимо импортировать FormsModule в корневой модуль, если этот компонент находится в корневом каталоге, т.е. app.module.ts
Пожалуйста, откройте app.module.ts
Импортировать FormsModule из @angular/forms
Пример:
import { FormsModule } from '@angular/forms';
а также
@NgModule({
imports: [
FormsModule
],
})
import FormsModule в вашем модуле приложения.
это позволит вашему приложению работать хорошо.
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import {ContactListCopmponent} from './contacts/contact-list.component';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
FormsModule
],
declarations: [
AppComponent,ContactListCopmponent
],
bootstrap: [ AppComponent ]
})
export class AppModule { }
Если вам нужно использовать [(ngModel)]
, сначала нужно импортировать FormsModule
в app.module.ts
, а затем добавить в список импорта. Что-то вроде этого:
app.module.ts
import {FormsModule} from "@angular/forms";
imports: [
BrowserModule,
FormsModule
],
app.component.ts
<input type="text" [(ngModel)]="name" >
<h1>your name is: {{name}} </h1>
Я использую Angular 5.
В моем случае мне тоже нужно было импортировать RactiveFormsModule.
app.module.ts (или anymodule.module.ts)
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@NgModule({
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule
],
Я использую Angular 7
Я должен импортировать RactiveFormsModule, потому что я использую класс FormBuilder для создания реактивной формы.
import {
FormsModule,
ReactiveFormsModule } from '@angular/forms';
@NgModule({
imports: [
CommonModule,
FormsModule,
ReactiveFormsModule
], declarations: []})
Если кто-то все еще получает ошибки после применения принятого решения, возможно, это связано с тем, что у вас есть отдельный файл модуля для компонента, в котором вы хотите использовать свойство ngModel во входном теге. В этом случае примените принятое решение в файле component module.ts.
если вы все еще получаете ошибку после правильного импорта FormsModule, проверьте свой терминал или (консоль Windows), потому что ваш проект не компилируется (из-за другой ошибки, которая может быть что угодно), и ваше решение не было отражено в вашем браузере!
В моем случае моя консоль имела следующую несвязанную ошибку: свойство 'retrieveGithubUser' не существует в типе 'ApiService'.
Я знаю, что этот вопрос касается Angular 2, но я нахожусь на Angular 4, и ни один из этих ответов не помог.
В Angular 4 синтаксис должен быть
[(ngModel)]
Надеюсь, что это поможет.
В модуле вы готовы использовать ngModel, вам нужно импортировать FormsModule
import { FormsModule } from '@angular/forms';
@NgModule({
imports: [
FormsModule,
],
})
export class AbcModule { }
ngModel исходит из FormsModule. В некоторых случаях вы можете получить этот вид ошибки:
В ngModule
вам нужно импортировать FormsModule
, потому что ngModel
исходит из FormsModule
. Пожалуйста, измените ваш app.module.ts как приведенный ниже код, которым я поделился
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
@NgModule({
declarations: [
AppComponent,
HomeComponent
],
imports: [
BrowserModule,
AppRoutingModule,
FormsModule
],
bootstrap: [AppComponent]
})
export class AppModule { }
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {}
Для моего сценария мне пришлось импортировать оба модуля [CommonModule] и [FormsModule] в мой модуль
import { NgModule } from '@angular/core'
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { MyComponent } from './mycomponent'
@NgModule({
imports: [
CommonModule,
FormsModule
],
declarations: [
MyComponent
]
})
export class MyModule { }
Вам необходимо импортировать FormsModule
Откройте app.module.ts
и добавить строку
import { FormsModule } from '@angular/forms';
а также
@NgModule({
imports: [
FormsModule
],
})
Это для людей, которые используют простой JavaScript вместо Type Script. В дополнение к ссылке на файл script вверху страницы, как показано ниже
<script src="node_modules/@angular/forms/bundles/forms.umd.js"></script>
вы также должны сообщить загрузчику модуля загрузить ng.forms.FormsModule
. После внесения изменений мое свойство imports
метода NgModule
выглядело ниже
imports: [ng.platformBrowser.BrowserModule, ng.forms.FormsModule],
Счастливое кодирование!
Иногда вы получаете эту ошибку при попытке использовать компонент из модуля, который не используется совместно, в другом модуле.
Например, у вас есть 2 модуля с module1.componentA.component.ts и module2.componentC.component.ts, и вы пытаетесь использовать селектор из module1.componentA.component.ts в шаблоне внутри модуля2 (например, <module1-componentA [someInputVariableInModule1]="variableFromHTTPRequestInModule2">
), это вызовет ошибку, что someInputVariableInModule1 недоступен внутри module1.componentA.component.ts - даже если у вас есть @Input() someInputVariableInModule1
в module1.componentA.
Если это произойдет, вы хотите поделиться модулем1.componentA, чтобы быть доступным в других модулях.
Поэтому, если вы совместно используете module1.componentA внутри sharedModule, module1.componentA будет использоваться внутри других модулей (вне модуля 1), и каждый модуль, импортирующий sharedModule, сможет получить доступ к селектору в своих шаблонах, введя объявленный @Input()
переменная.
Иногда, если мы уже импортировали BrowserModule
, FormsModule
и другие связанные модули, хотя я получил ту же ошибку, я понял, что нам нужно импортировать их в Order, в моем случае я пропустил его. Таким образом, порядок должен быть таким, как BrowserModule
, FormsModule
, ReactiveFormsModule
.
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule
],
providers: [],
declarations: [
AppComponent
],
bootstrap: [AppComponent]
})
export class AppModule {}
Надеюсь, это поможет кому-то.. :)
Я обновился с RC1 до RC5 и получил эту ошибку.
Я завершил свою миграцию (представил новый файл app.module.ts
, изменив package.json
app.module.ts
в него новые версии и отсутствующие модули, и, наконец, изменив main.ts
для соответствующей загрузки на основе примера быстрого запуска Angular2).
Я сделал npm update
а затем npm outdated
чтобы подтвердить, что установленные версии верны, но все же не повезло.
Я закончил тем, что полностью node_modules
папку node_modules
и переустановил с помощью npm install
- Вуаля! Задача решена.
Когда я впервые сделал учебник, main.ts выглядел несколько иначе, чем сейчас. Он выглядит очень похожим, но обратите внимание на различия (верхний правильный).
Правильно:
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
platformBrowserDynamic().bootstrapModule(AppModule);
Старый код учебника:
import { bootstrap } from '@angular/platform-browser-dynamic';
import { AppComponent } from './app.component';
bootstrap(AppComponent);
Для любой версии из Angular 2 вам необходимо импортировать FormsModule в файл app.module.ts, и он исправит проблему.
Недавно я обнаружил, что ошибка возникает не только в том случае, если вы забыли импортировать FormsModule в свой модуль. В моем случае проблема была в этом коде
<input type="text" class="form-control" id="firstName"
formControlName="firstName" placeholder="Enter First Name"
value={{user.firstName}} [(ngModel)]="user.firstName">
Я исправляю это с изменением formControlName → name
<input type="text" class="form-control" id="firstName"
name="firstName" placeholder="Enter First Name"
value={{user.firstName}} [(ngModel)]="user.firstName">
Я надеюсь, что этот ответ сэкономит время для тех, у кого такая же проблема.
ngModel является частью FormsModule. И он должен быть импортирован из @angular/forms для работы с ngModel.
Пожалуйста, измените app.module.ts следующим образом:
import { FormsModule } from '@angular/forms';
[...]
@NgModule({
imports: [
[...]
FormsModule
],
[...]
})