2013-09-07 3 views
8

実際にng-model属性が私のモデルに直接バインドされ、ユーザーが変更に対して即時フィードバックを得るのが好きです。私のユースケースは完璧です。しかし、私はモデルに無効​​な値を入れて、レンチを計算に入れることはできません。フォームコントロール内の値が有効な場合にのみ、モデルを更新する必要があります。無効な値の場合は、モデル値が固定されたままで制御値が変更されても問題ありません。ng-modelで無効な値を記録しない

私はNgModelControllerの$ setViewValue実装角度(1.2rc)のソースを変更した場合:これに

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を見て:数は10と20の間の値に対して適切に示しているが、もしあなたが突然ように私はそれをしたい

var myApp = angular.module('myApp',[]); 

function MyCtrl($scope) { 
    $scope.validNumber = 15; 
} 

<div ng-controller="MyCtrl"> 
    {{validNumber}} 
    <form> 
     <input 
      type="number" 
      ng-model="validNumber" 
      required 
      min="10" 
      max="20" 
     /> 
    </form> 
</div> 

とJSボックスに「8」を入力するか、2番目の数字を削除して、上記の最後の有効な数字が「1」のままにします。つまり、コントロールが有効でない場合でも、モデルは常に有効な値を持ちます。

答えて

7

渡された値が無効な場合、AnugularJSバリデータのデフォルトの動作はモデルを更新しないと考えています。 developer guideを見てCustom Validationを見ると、これらのサンプルは、モデルが更新されていないか、UIで提供されている無効な値で消去されたことを示しています。

+0

はい私は例を追加しました。私はフィールドがnullになることを望んでいない、私はそれが有効な値を保持したい。 –

+1

あなたは正しいです。それはモデルを変更しません、私は期待していなかったUIの他の場所に無効なモデル値を表示しません。 –

2

Chandermani氏は、これがデフォルトの動作であることを示しています。実行中:

<form name="myform"> 
    <input type="text" name="myinput" ng-model="myvalue" ng-minlength="4" required> 
</form> 

Is the input valid ? {{ myform.myinput.$valid }} <br /> 
Input's value : {{ myvalue }} 

入力に少なくとも4文字を書き込むまで、{{myvalue}}には何も表示されません。

よろしくお願いいたします。

EDIT

デフォルト値が必要な場合は、私はあなたが計算された値を使用して、2つの値にあなたの価値を打破することができると思います:

var validNumber = 15; 
    $scope.validNumber = function() { 
     if ($scope.myform.myNumber.$valid) return $scope.myNumber; 
     else return validNumber; 
    }; 

私はここに例の設定:http://jsfiddle.net/7vtew/1/

+1

はい申し訳ありませんが、私は例を追加しました。私はフィールドがnullになることを望んでいない、私はそれが有効な値を保持したい。 –

+0

私はあなたの例をテストしました。フィールドに入力された値が有効でない場合、モデル値は ''(空の文字列)になります。これはmyinputsの検証制約に従って有効な値ではないために面倒です。 http://jsfiddle.net/yU3Zv/ –

+0

デフォルト値が必要な場合は、可能な解決方法で編集しました。ありがとう。 – Prezbar

関連する問題