ng-model 属性がモデルに直接バインドされ、ユーザーが変更について即座にフィードバックを得る方法が本当に気に入っています。私のユースケースでは完璧です。ただし、計算にレンチを投入できるモデルに無効な値を入れたくありません。フォームコントロールの値が有効な場合にのみ、モデルを更新したいと思っています。無効な値の場合、モデル値が固定されたままコントロール値が変更されても問題ありません。
angular (1.2rc) NgModelController の $setViewValue 実装のソースを変更すると:
this.$setViewValue = function(value) {
...
if (this.$modelValue !== value) {
this.$modelValue = value;
...
}
};
これに:
this.$setViewValue = function(value) {
...
if (this.$modelValue !== value && this.$valid) {
this.$modelValue = value;
...
}
};
それはまさに私が望むことをしているようですが、これを適切な方法で行う方法がわかりません。この動作を変更する正しい方法は何ですか? それとも、私の試みは何らかの理由で失敗する運命にありますか?
更新: 例を追加しました。
たとえば、 http: //jsfiddle.net/FJvgK/1/ HTMLを見てください。
<div ng-controller="MyCtrl">
{{validNumber}}
<form>
<input
type="number"
ng-model="validNumber"
required
min="10"
max="20"
/>
</form>
</div>
そしてJS:
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.validNumber = 15;
}
数値は 10 から 20 の間の値に対して適切に表示されますが、ボックスに突然「8」を入力するか、2 番目の数字を削除して「1」を残した場合でも、最後の有効な数値が上に表示されるようにしたいと考えています。つまり、コントロールが有効でない場合でも、モデルには常に有効な値があります。