'input'要素の既知のプロパティではなく、対応するプロパティと一致するディレクティブがないため、 'ngModel'にバインドできません
注:imは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は9月15日にその最終バージョンをリリースしました。 Angular 1とは異なり、双方向データバインディングにはAngular 2でngModel
ディレクティブを使用できますが、[(ngModel)]
(Bananaのように少し違う方法で書く必要があります。ボックスの構文では)。ほとんどすべてのangular2コアディレクティブは現在kebab-case
をサポートしていません代わりにcamelCase
を使うべきです。
ngModel
ディレクティブはFormsModule
に属しているので、import
のFormsModule
メタデータオプション内の@angular/forms
モジュールからのimports
をAppModule
にする必要があります(NgModule)。その後、あなたはあなたのページの中でngModel
ディレクティブを使うことができます。
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);
キーポイント:
angular2のngModelは、FormsModuleがAppModuleの一部として使用可能な場合にのみ有効です。
ng-model
は構文的に間違っています。
だから、あなたのエラーを修正するために。
ステップ1:FormsModuleのインポート
import {FormsModule} from '@angular/forms'
ステップ2:AppModuleの配列を次のようにインポートします。
imports :[ ... , FormsModule ]
ステップ3:ng-model
をngModelに、バナナボックスを
<input id="name" type="text" [(ngModel)]="name" />
注:また、以下のように双方向のデータバインディングを別々に処理できます。
<input id="name" type="text" [ngModel]="name" (ngModelChange)="valueChange($event)"/>
valueChange(value){
}
Angular 2の最終版にあるように、多くの人が上で提案したようにFORM_DIRECTIVES
をインポートする必要すらありません。しかし、改善のために kebab-caseが で削除されたため、構文が変更されました。
ng-model
をngModel
に置き換えて、それを ボックスのバナナ で囲むだけです。しかし、コードを2つのファイルに書き出しました。
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);
Angular 2 Beta
この回答はangularJS v.2.0 BetaにJavascriptを使っている人のためのものです。
ビューでngModel
を使用するには、AngularのコンパイラにngModel
というディレクティブを使用していることを伝えます。
どうですか?
ngModel
を使うために、angular2 Betaには2つのライブラリがあり、それらはng.common.FORM_DIRECTIVES
とng.common.NgModel
です。
実際にはng.common.FORM_DIRECTIVES
はフォームを作成するときに役立つディレクティブの集まりに他なりません。 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";
},
});
App.module.ts内
import { FormsModule } from '@angular/forms';
@NgModuleデコレータのインポートの後半にあります。
@NgModule({
imports: [
BrowserModule,
FormsModule
]
})
私を助けた答えは: ディレクティブ[(ngModel)] = rc5ではもう動作しません
要約すると、入力フィールドはフォームにプロパティname
を必要とします。
ng-modelの代わりにこのコードを使うことができます:
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `<input #box (keyup)="0">
<p>{{box.value}}</p>`,
})
export class AppComponent {}
あなたのapp.component.tsの中
以下のコードを以下のファイルに追加してください。
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 ]
})
お役に立てれば