【问题标题】:Angular display formatted number in input field输入字段中的角度显示格式化数字
【发布时间】:2016-08-12 13:48:54
【问题描述】:

伙计们。 我有一个输入字段:

<input type="number" name="price" ng-model="ctrl.form.price" required>

问题在于,每当用户键入数字时,它都会自动对其进行格式化。 示例:5 312 000.12313 但是,当用户提交这个表单时,ctrl.form.price 的值应该是 5312000.12313。 我知道有过滤器,但据我所知,它们只能用于单向数据绑定。 有什么办法可以做到这一点?

【问题讨论】:

  • 那么您应该使用输入类型="text" 吗?如果您只想限制为数字,请使用适当的功能?
  • @GustavoGabriel,你能提供一个基本的例子吗?

标签: angularjs binding formatting


【解决方案1】:

您应该使用解析器和格式化程序编写指令。解析器函数应将显示的带有空格的值转换为数字,格式化程序函数将数字转换为显示的文本。

类似:

angular.module('app').directive('formattedNumber', formattedNumber);

function formattedNumber() {
   var directive = {
        restrict: 'A',
        require 'ngModel',
        link: link
   };
   return directive;

   function link(scope, element, attrs, ngModelController) {
       ngModelController.$parsers.push(parseNumber);
       ngModelController.$formatters.push(formatNumber);
   }

   function parseNumber(viewValue) {
       // convert text with spaces to number and return it.
   }
   function formatNumber(modelValue) {
       // convert numeric modelValue to formatted text and return it.
   }
}

那么就:

<input type="number" name="price" ng-model="ctrl.form.price"
  formatted-number required>

【讨论】:

  • 据我所知 $parsers 用于格式化从用户到服务器和格式化程序的数据 - 从服务器到用户。但是,我需要作为用户类型的文本更改(与过滤器相同,但用于两种方式绑定),类似于从用户到用户
  • @RustamIbragimov,与服务器无关,都是双向绑定:$parsers将数据从视图中的显示值转换为模型值,$formatters从模型转换到视图中显示的值(在我的示例中有一个错字,我写了$parsers 而不是$formatters,我现在已经更正了)
猜你喜欢
  • 2021-11-30
  • 2014-11-05
  • 2019-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多