2017-03-13 9 views
0

を希望する値をバインドすることはできませんこれは私のHTMLテンプレートのコードです:angular2 ngmodel iが

<input type="text" maxlength="5" 
    [(ngModel)]="groupInfo.discount" (keyup)="validateFloat($event)"> 

私validateFloat方法があります:

validateFloat(event){ 
    event.target.value = event.target.value.replace(/[^\d.]/g, ""); 
    console.log(this.groupInfo.discount); 
} 

、入力値:

12adc 
は、

入力要素出力値:

12 

が、groupInfo.discount値は次のとおりです。

12a 

groupInfo.discount値が12aである理由を私は理解できないのですか?

また、groupInfo.discountの値をinput要素の値と同じにするにはどうすればよいですか?

私のパッケージの依存関係:

"@angular/common": "2.0.0-rc.6", 
"@angular/compiler": "2.0.0-rc.6", 
"@angular/core": "2.0.0-rc.6", 
"@angular/forms": "2.0.0-rc.6", 
"@angular/http": "2.0.0-rc.6", 
"@angular/platform-browser": "2.0.0-rc.6", 
"@angular/platform-browser-dynamic": "2.0.0-rc.6", 
"@angular/router": "3.0.0-rc.2", 
+0

何をしようとしていますか少し説明できますか? –

+0

私はgroupInfo.discountの値が入力要素の値と等しいことを願っています – Charles

答えて

1

あなたは(keyup)使用(ngModelChange)イベント

template.html

<input type="text" maxlength="5" 
[(ngModel)]="groupInfo.discount" (ngModelChange)="validateFloat($event)"> 

よりも優れたテンプレートに入力& & ngModelを使用している場合、私はその唯一のtrigger issueと考えていますevent

+0

それは私のために働いていませんでした! – Charles

+0

私は1つの値の差分のみがあることを知っています。あなたの例では2つの違いがあります。あなたの角度バージョンは何ですか – mayur

0

あなたのアップデートがngModelによって適切に選択されていないようです。

は非同期的にこのようなあなたのアップデートをやって試してみてください:あなたはので、それをやろうとしているもので、それに空想を取得しようとすると、

validateFloat(event){ 
    setTimeout(() => { 
    event.target.value = event.target.value.replace(/[^\d.]/g, ""); 
    console.log(this.groupInfo.discount); 
    }, 50); 
} 

ngModelは、いくつかの直感的振る舞いを持っています - (DOMへのコンポーネントの変化を反映し、あなたのコンポーネント内のDOMへの変更)。 Angularでは、変更検出サイクル中にチェックした後で値を変更することはできないため、ngModelは非同期で動作する必要があり、予期しない動作につながる可能性があります。

+0

groupInfo.discountの値が入力要素の値と等しくない – Charles

関連する問題