当前位置: 首页 > 知识库问答 >
问题:

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

杨安歌
2023-03-14

我认为tht有以下要求:

  • 超文本标记语言输入type必须是number
  • 以编程方式设置该输入的模型属性值,后面有2个小数
  • 允许用户输入修改该值

现在,以编程方式将值设置为1.20,以便在输入中显示该值是复杂的:

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

有什么想法吗?

共有2个答案

荣沈义
2023-03-14

您可以利用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)
          });
    }
}
}

ngModel格式化程序和解析器

公西鸿博
2023-03-14

基于https://github.com/angular/angular.js/issues/5680#issuecomment-206325921我做了以下工作:

(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为null或空或未定义,我想设置默认值1。它工作正常。但是在同一页面上,我有一个提交按钮。单击此按钮,我只是为一些验证失败返回false。但是当它在验证失败后返回时。我的下拉列表(输入类型号)显示空值。我检查ng-model的值,它是空的。 因此,如果该值不是正确的数字,我希望它在默认情况下设置为1。

  • 问题内容: 如果输入不是有效数字,则使用将导致事件侦听器内部返回空字符串。 但是,无效字符仍显示在输入中。 有什么方法可以从事件侦听器中获取实际 显示 的值,包括无效字符? 我的最终目标是防止用户在字段中实际键入任何非数字字符。我需要使用以便移动设备使用数字虚拟键盘。我的目标是做这样的事情上,但这并不因为如果无效字符键入工作,从阅读的回报。 问题答案: 如果您不喜欢传入键值,请尝试阻止默认行为:

  • 问题内容: 如何利用ng-message作为数字类型?ngMessage是否支持max和min属性?如果可以,怎么办? 演示链接 来自角度文档的示例链接 问题答案: 作为模块正式引入的版本,因此您需要修复以下问题: 使用版本或更高版本(现在是最新版本)。 包含在HTML中(这是一个单独的脚本)。 声明为模块/应用程序的依赖项。 另请参 见此简短演示 。

  • 问题内容: 我正在尝试编写一条指令,该指令会自动在中格式化数字,但模型未格式化。使它正常工作是很好的,在加载时,输入值在控制器中显示为1,000,000和1000000,但是,只有键入时,该函数才会触发。发生火灾的唯一时间是指令被加载且值为0时。 我怎样才能使它在keypress上起作用(我曾尝试绑定到keypress / keyup,但它不起作用)。 这是我的代码: 问题答案: 这是我们使用的工

  • 问题内容: Whenver我有一个角表达式作为值的,它不会工作: 数字值将转换为字符串,并且复选框根本无法使用。 http://jsfiddle.net/punund/NRRj7/3/ 问题答案: 您不能动态更改输入的类型,因为IE不允许这样做,并且AngularJS需要跨浏览器兼容。因此,即使您可能会看到更改后的类型显示在源代码中,AngularJS也不会接受它- 类型仅被评估一次,并且无法更改