2013-09-07 9 views
8

Ng model özniteliğinin doğrudan modelime nasıl bağlanacağını ve kullanıcıların değişiklikler hakkında anında geri bildirim almasını seviyorum. Benim kullanım durumum için bu mükemmel. Ancak, hesaplamalara bir anahtar atabilecekleri modele geçersiz değerlerin konmasını istemiyorum. Bir şekilde modelin yalnızca form kontrolündeki değerin geçerli olması durumunda güncellenmesini istiyorum. Geçersiz değerler için, model değeri sabit kalırken kontrol değerinin değişmesi iyidir.ng-modeliyle geçersiz değerler kaydetme

Ben NgModelController en $ setViewValue uygulanmasını açısal (1.2rc) kaynağını değiştirirseniz: Buna

this.$setViewValue = function(value) { 
... 
    if (this.$modelValue !== value) { 
    this.$modelValue = value; 
    ... 
    } 
}; 

:

Tam olarak ne istediğinizi yapmak gibi görünüyor
this.$setViewValue = function(value) { 
... 
    if (this.$modelValue !== value && this.$valid) { 
    this.$modelValue = value; 
    ... 
    } 
}; 

, ancak don' Bunu nasıl uygun bir şekilde yapılacağını bilir. Bu davranışı değiştirmenin doğru yolu nedir? Yoksa bazı sebeplerden dolayı başarısızlığa mahkum edilmiş benim girişimlerim mi?

Güncelleştirme: Eklenen örnek.

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

Ve JS:

Örneğin http://jsfiddle.net/FJvgK/1/ HTML bakmak

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

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

sayısı 10 ile 20 arasında değerler için düzgün gösterir, ama öyle istedigini aniden eğer Kutuya '8' yazın veya '1' bırakarak ikinci rakamı silin, son geçerli sayı hala yukarıda gösterilir. Yani, kontrol her ne kadar olsa bile, model her zaman geçerli bir değere sahiptir.

cevap

7

AnugularJS doğrulayıcılarının varsayılan davranışı, geçersiz değer geçtiyse modeli güncellememeye inanıyorum. developer guide'a bakarsanız ve Custom Validation'dan geçerseniz, bu örnekler modelin UF

+0

evet üzgünüm bir örnek ekledim. Alanın boş gitmesini istemiyorum, geçerli bir değer tutmasını istiyorum. –

+1

Haklıydın. Model değişmez, aynı zamanda beklemediğim/istemediğim kullanıcı arayüzünde yer alan geçersiz model değerlerini de göstermez. –

2

'da belirtilen geçersiz değerde güncellenmediğini veya temizlendiğini gösterir. Chandermani'nin dediği gibi, bu varsayılan davranıştır, işte bu örnekte şudur: eylem o:

<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 }} 

{{MyValue}} Eğer girişte en az 4 karakter yazma kadar bir şey göstermez.

Saygılarımızla.

DÜZENLEME

Eğer varsayılan bir değer gerekiyorsa, sana bir bilgisayarlı değeri kullanarak, 2 değerlerine değerinizi yıkmak sanırım:

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

Burada bir örnek kurmak: http://jsfiddle.net/7vtew/1/

+1

evet üzgünüm bir örnek ekledim. Alanın boş gitmesini istemiyorum, geçerli bir değer tutmasını istiyorum. –

+0

Örneğini test ettim. Alanda yazılan değer geçerli olmadığında model değeri '' (boş dizge) olur, zahmetlidir çünkü '' aynı zamanda myinputs doğrulama sınırlamalarına göre geçerli bir değer değildir. http://jsfiddle.net/yU3Zv/ –

+0

Varsayılan bir değere ihtiyacınız varsa olası bir çözümle düzenledim. Teşekkürler. – Prezbar