Javascript 输入类型编号,toFixed值在AngularJS中失败
我认为tht有以下要求:Javascript 输入类型编号,toFixed值在AngularJS中失败,javascript,html,angularjs,Javascript,Html,Angularjs,我认为tht有以下要求: HTML输入类型必须是数字 以编程方式将该输入的model属性值设置为2个尾随小数 允许用户输入修改该值 现在,通过编程将该值设置为1.20,以便在输入中显示该值是很复杂的: parseFloat(1.20)返回1.2 (1.20).toFixed(2)返回字符串'1.20',AngularJS在尝试设置该值时失败 有什么想法吗?您可以利用NgModel并添加解析器或格式化程序 function NumberFormatter($filter){ 'ngInje
- HTML输入
必须是类型
数字
- 以编程方式将该输入的model属性值设置为2个尾随小数
- 允许用户输入修改该值
1.20
,以便在输入中显示该值是很复杂的:
返回parseFloat(1.20)
1.2
返回字符串(1.20).toFixed(2)
,AngularJS在尝试设置该值时失败'1.20'
有什么想法吗?您可以利用NgModel并添加解析器或格式化程序
function NumberFormatter($filter){
'ngInject';
return {
restrict: 'A',
require: '^ngModel',
link: function(scope, element, attrs, ngModelCtrl){
//format text going to user (model to view)
ngModelCtrl.$formatters.push(function(value) {
return $filter('number')(parseFloat(value) , 2);
});
//format text from the user (view to model)
ngModelCtrl.$parsers.push(function(value) {
return doParsing(value)
});
}
}
}
根据我所做的:
(function(){
angular.module('app')
.directive('toFixed', [function () {
return {
require: '^ngModel',
link: function(scope, element, attrs, ngModel) {
ngModel.$formatters.push(function(value) {
return parseFloat(value);
});
ngModel.$render = function() {
var viewValue = parseFloat(ngModel.$viewValue || 0);
element.val(viewValue.toFixed(2));
}
}
};
}]);
}());
在创建与
ng model
指令一起使用的自定义指令时,请使用或创建使用的。最好避免使用隔离作用域。还应避免使用ng model
属性进行双向绑定;使用单向绑定(在这种情况下,看起来我可以删除隔离作用域。此解决方案没有解决在呈现到视图时使用toFixed
格式化值失败的主要问题,因为输入类型是number,而不是string(它toFixed
返回),否则我会得到错误:[ngModel:numfmt]预计1.20是一个数字
您是否可以使用数字输入步骤而不是toFixed()?我更新了答案,以包括一个数字过滤器,该过滤器应始终显示两位小数。