AngularJS:未聚焦时在输入中显示格式化的模型值
AngularJS: Display formatted model value in input when not focussed
假设我有一个输入,如下所示:
<input type="text" ng-model="myVariable">
当前值为 600.23。$scope.myVariable 的值应始终为 600.23(除非用户更改值(我希望输入在输入没有焦点时显示 $600.23,但是当使用提供输入焦点时,我希望它切换到未格式化的 ng-model 值 600.23 供用户编辑。用户完成编辑并移走焦点后,我希望显示的值再次采用货币格式。基本上类似于电子表格应用程序中格式化单元格的工作方式。为了使问题简单,请忽略输入验证的需要。
这可以用jQuery相当容易地完成,但是可以用纯AngularJS做到这一点吗?
您可以使用ngBlur ang ngFocus来切换值。创建函数,该函数将添加 $ 并在 ngBlur 上触发它,另一个用于删除它。
这是我创建的解决方案,它依赖于jQuery(更糟糕的是,eval!(:
angular.module('app', [])
.directive('displayFormat', function () {
return function (scope, element, attr) {
$(element).focus(function () {
$(this).val(eval('scope.' + $(this).attr('ng-model')));
});
$(element).blur(function () {
var modelValue = parseFloat(eval('scope.' + $(this).attr('ng-model')));
if (attr["displayFormat"] == 'currency') $(this).val('$' + modelValue.numberFormat(2));
if (attr["displayFormat"] == 'percentage') $(this).val((modelValue * 100) + '%');
});
};
});
Number.prototype.numberFormat = function (decimals, dec_point, thousands_sep) {
dec_point = typeof dec_point !== 'undefined' ? dec_point : '.';
thousands_sep = typeof thousands_sep !== 'undefined' ? thousands_sep : ',';
var parts = this.toFixed(decimals).toString().split('.');
parts[0] = parts[0].replace(/'B(?=('d{3})+(?!'d))/g, thousands_sep);
return parts.join(dec_point);
}
然后在控制器中:
$scope.$watch(function () {
$('input').not(':focus').blur();
});
然后是输入字段:
<input type="text" ng-model="myVariable" display-format="currency">
(在我的实际应用程序中,除了货币之外,我将实现其他显示格式选项(
不过,我真的很想有一个非jQuery解决方案。
相关文章:
- HTML文本框,它接受电话号码,并以美国电话号码格式显示
- 输出文本不't以正确格式显示
- 如何在JavaScript中以天、dd/mm/yyyy格式显示昨天的日期
- 如何使用 angularjs 以表格格式显示 parse.com 的查询结果
- 用格式显示日期
- 转换&用javascript将mongodb的UTC格式显示为EST格式
- 强制 Chrome 显示格式为树结构的 Json 响应
- 循环多维数组并以 html 格式显示数据
- 以 HTML 格式显示计算结果 (javascript)
- 将一天中的时间保存为mongodb中的数字,但以人类格式显示(使用流星自动形成)
- 将文件读取到 blob 并以 JavaScript 格式显示
- Json - 日期未以正确的格式显示
- 在新选项卡中以可读格式显示 json
- JQuery DatePicker UI 显示格式
- 如何以 html/rich 格式显示邮件
- 如何使用 javascript 或 jquery 以表格式显示 JSON 对象
- 显示格式无法格式化
- 以水平格式而不是垂直格式显示由HTML / JavaScript生成的CSV文件
- UTC 时间不是以 24 小时格式显示的,并且在上午 12 点之后不正确
- 以12小时格式显示时间