Impossible de se lier à 'ngModel' car ce n'est pas une propriété de l'élément 'input' et il n'y a pas de directive correspondante avec une propriété correspondante
Note: im utilisant alpha.31
import { Component, View, bootstrap } from 'angular2/angular2'
@Component({
selector: 'data-bind'
})
@View({
template:`
<input id="name" type="text"
[ng-model]="name"
(ng-model)="name = $event" />
{{ name }}
`
})
class DataBinding {
name: string;
constructor(){
this.name = 'Jose';
}
}
bootstrap(DataBinding);
Angular a publié sa version finale le 15 septembre. Contrairement à Angular 1, vous pouvez utiliser la directive ngModel
dans Angular 2 pour la liaison de données bidirectionnelle, mais vous devez l'écrire de manière légèrement différente, comme [(ngModel)]
( Banane dans une syntaxe de boîte ). Presque toutes les directives de base angular2 ne supportent pas kebab-case
, vous devez maintenant utiliser camelCase
.
Maintenant, la directive
ngModel
appartient àFormsModule
, c'est pourquoi vous devriezimport
laFormsModule
du module@angular/forms
à l'intérieur deimports
option de métadonnées deAppModule
(NgModule). Vous pouvez ensuite utiliser la directivengModel
à l'intérieur de votre page.
app/app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `<h1>My First Angular 2 App</h1>
<input type="text" [(ngModel)]="myModel"/>
{{myModel}}
`
})
export class AppComponent {
myModel: any;
}
app/app.module.ts
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppComponent } from './app.component';
@NgModule({
imports: [ BrowserModule, FormsModule ], //< added FormsModule here
declarations: [ AppComponent ],
bootstrap: [ AppComponent ]
})
export class AppModule { }
app/main.ts
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';
const platform = platformBrowserDynamic();
platform.bootstrapModule(AppModule);
Points clés:
ngModel dans angular2 est valide uniquement si FormsModule est disponible dans le cadre de votre AppModule.
ng-model
est faux sur le plan de la synchronisation.
Donc, pour corriger votre erreur.
Étape 1: Importer FormsModule
import {FormsModule} from '@angular/forms'
Étape 2: Ajoutez-le au tableau imports de votre AppModule en tant que
imports :[ ... , FormsModule ]
Étape 3: Changer ng-model
comme ngModel avec les boîtes bananes comme
<input id="name" type="text" [(ngModel)]="name" />
Remarque: De plus, vous pouvez gérer la liaison de données bidirectionnelle séparément ainsi que ci-dessous
<input id="name" type="text" [ngModel]="name" (ngModelChange)="valueChange($event)"/>
valueChange(value){
}
Comme dans Angular2 final, vous n'avez même pas besoin d'importer FORM_DIRECTIVES
comme suggéré ci-dessus par beaucoup. Cependant, la syntaxe a été modifiée de la manière suivante: kebab-case a été abandonné pour l'amélioration.
Il suffit de remplacer ng-model
par ngModel
et de l'envelopper dans ne boîte de bananes . Mais vous avez maintenant versé le code dans deux fichiers:
app.ts:
import { Component } from '@angular/core';
@Component({
selector: 'ng-app',
template: `
<input id="name" type="text" [(ngModel)]="name" />
{{ name }}
`
})
export class DataBindingComponent {
name: string;
constructor() {
this.name = 'Jose';
}
}
app.module.ts:
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { DataBindingComponent } from './app'; //app.ts above
@NgModule({
declarations: [DataBindingComponent],
imports: [BrowserModule, FormsModule],
bootstrap: [DataBindingComponent]
})
export default class MyAppModule {}
platformBrowserDynamic().bootstrapModule(MyAppModule);
Dans le app.module.ts
import { FormsModule } from '@angular/forms';
Plus tard dans l'importation du décorateur @NgModule:
@NgModule({
imports: [
BrowserModule,
FormsModule
]
})
angulaire 2 bêta
Cette réponse est destinée à ceux qui utilisent Javascript pour angularJS v.2.0 Beta.
Pour utiliser ngModel
dans votre vue, vous devez indiquer au compilateur de l’angle que vous utilisez une directive appelée ngModel
.
comment?
Pour utiliser ngModel
, il existe deux bibliothèques dans angular2 Beta, qui sont ng.common.FORM_DIRECTIVES
et ng.common.NgModel
.
En réalité, ng.common.FORM_DIRECTIVES
n'est qu'un groupe de directives qui sont utiles lors de la création d'un formulaire. Elle inclut également la directive NgModel
.
app.myApp = ng.core.Component({
selector: 'my-app',
templateUrl: 'App/Pages/myApp.html',
directives: [ng.common.NgModel] // specify all your directives here
}).Class({
constructor: function () {
this.myVar = {};
this.myVar.text = "Testing";
},
});
au lieu de ng-model, vous pouvez utiliser ce code:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `<input #box (keyup)="0">
<p>{{box.value}}</p>`,
})
export class AppComponent {}
dans votre app.component.ts
La réponse qui m'a aidé: La directive [(ngModel)] = = ne fonctionne plus dans rc5
En résumé: les champs de saisie nécessitent maintenant la propriété name
du formulaire.
Ajoutez le code ci-dessous aux fichiers suivants.
app.component.ts
<input type="text" [(ngModel)]="fname" >
{{fname}}
export class appcomponent {
fname:any;
}
app.module.ts
import {FormsModule} from '@angular/forms';
@NgModule({
imports: [ BrowserModule,FormsModule ],
declarations: [ AppComponent],
bootstrap: [ AppComponent ]
})
J'espère que cela t'aides