bir açısal uygulamada bir float kullanıcı girişine bir kapsam değişkenini bağlamanız gerekir.Float giriş crossbrowser
<my-float ng-model="myValue" name="floatValue"></my-float>
<button type="button" ng-disable="myValue.$invalid">Submit</submit>
Kullanıcı virgül veya alanına sahip ve en fazla iki ondalık hane ile ayrılmış bir sayıyı, eklemek gerekir. html girişi, yalnızca ikinci ondalık basamaktan sonra her şeyi görmezden gelen karakterleri göstermelidir.
Testler
- 0 -> Tamam -> MyValue =
- 0.1, 0 ya da 0,1 -> Tamam -> MyValue = 0.1
- 0.12 ya da 0,12 - > Tamam -> modeli = 0.12
- 12 -> Tamam -> MyValue =
- 12.3 ya da 12.3 12 -> ok MyValue =
12,34 12,3 veya 12,34 -> tamam myValue = 12.34
Bu kod benim sorunu çözmek: html burada
<input name="x" type="text" my-float ng-model="value"> <div>error:{{f.x.$invalid}}</div>
ile
app.directive("myFloat",['$filter',function($filter){ var FLOAT_REGEXP = /^\-?\d+((\.|\,)\d+)?$/; return { require: 'ngModel', link: function(scope, elm, attrs, ctrl) { ctrl.$formatters.unshift(function(viewValue){ if (FLOAT_REGEXP.test(viewValue)) { ctrl.$setValidity('float', true); var vv = getNewViewValue(viewValue); var floatValue = parseFloat(vv); ctrl.$setViewValue(vv); ctrl.$render(); return $filter('truncate')(floatValue); } else{ ctrl.$setValidity('float', false); } return viewValue; }); var getNewViewValue = function(vv){ var str = (vv +'').replace(",","."); var splitted = str.split("."); if(splitted[1] && splitted[1].length > 2){ splitted[1] = splitted[1].substring(0,2); return splitted[0]+'.'+ splitted[1]; } return vv; }; ctrl.$parsers.unshift(function(viewValue) { if (FLOAT_REGEXP.test(viewValue)) { ctrl.$setValidity('float', true); var vv = getNewViewValue(viewValue); var floatValue = parseFloat(vv); ctrl.$setViewValue(vv); ctrl.$render(); return $filter('truncate')(floatValue); } else { console.log("input not valid"); ctrl.$setValidity('float', false); return undefined; } }); } } }]);
söyleyebilirim bir plnkr
Sadece izin verilen karakterleri görmesi için kullanıcıyı kısıtlamam gerekiyor ... bu yüzden $ formatters ve $ render kullanmayı deniyorum – Gianpolo