Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 输入类型编号,toFixed值在AngularJS中失败_Javascript_Html_Angularjs - Fatal编程技术网

Javascript 输入类型编号,toFixed值在AngularJS中失败

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

我认为tht有以下要求:

  • HTML输入
    类型
    必须是
    数字
  • 以编程方式将该输入的model属性值设置为2个尾随小数
  • 允许用户输入修改该值
现在,通过编程将该值设置为
1.20
,以便在输入中显示该值是很复杂的:

  • parseFloat(1.20)
    返回
    1.2
  • (1.20).toFixed(2)
    返回字符串
    '1.20'
    ,AngularJS在尝试设置该值时失败

有什么想法吗?

您可以利用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()?我更新了答案,以包括一个数字过滤器,该过滤器应始终显示两位小数。