2012-10-25 15 views
7

Zestaw formantów wejściowych HTML są zobowiązane do testVar:Dlaczego dane wejściowe typu = "liczba" nie pokazują aktualizacji powiązanej wartości?

<div ng-app> 
    <div ng-controller="TestCtrl"> 
     <input type="text" ng-model="testVar"> 
     <input type="number" min="1" max="10" ng-model="testVar"> 
     <input type="range" min="1" max="10" ng-model="testVar"> 
     <button ng-click="testVar = 5">set to 5</button>    
    </div> 
</div> 

Początkowo wszystkie kontrole wejściowe pokazują tę wartość zgodnie z oczekiwaniami, ale type = „number” wejście staje się puste, gdy testVar zostanie zmieniona poprzez type =” zakres "lub typ =" tekst ". Ustawienie wartości testVar programowo powoduje oczekiwane zachowanie: wszystkie wejścia pokazują zaktualizowaną wartość.

Kwestia Świadczy o tym prostym przypadku: http://jsfiddle.net/7cbYp/

Dlaczego tak się dzieje i jak to może być stałe?

+2

problem wydaje się, że wejście [type = liczba] nie przyjmuje wartości ciągów, rzeczywiście uzyskać "NG-invalid-numer" klasy. Myślę, że to błąd. jeśli zmienisz swój przycisk na ten przycisk ustaw na 5 "masz ten sam * błąd * –

+0

z jaką przeglądarką (-ami) testujesz? – Spudley

+0

Używam chromium21, opera12 i IE9 (nie ma wejścia zasięgu, np. Ale liczba pozostaje pusta) –

Odpowiedz

3

szybkie ustalenie byłoby stworzenie dyrektywy i obserwować zmiany w modelu i elementu HTML samego

HTML

<input type="number" min="1" max="10" fix="testVar"> 

JS

var App = angular.module('App', []); 
App.directive('fix', function(){ 
    return{ 
     link: function(scope, elem, attrs){ 
      scope.$watch(attrs.fix, function(v){ 
       if(typeof v === 'string') v = parseInt(v, 10); 
       elem.val(v); 
      }); 
      elem.bind('change', function(){ 
       scope[attrs.fix] = elem.val(); 
       scope.$digest(); 
      }); 
     } 
    }; 
}); 

Mam tylko ją przetestowany w Chrome i działa.

jsfiddle: http://jsfiddle.net/jaimem/HLnqt/3/

Uwaga: nie musi być bardziej przejrzysty sposób to zrobić.

Powiązane problemy