加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用AngularJS指令格式化输入字段,同时保持范围变量不变

发布时间:2020-12-17 08:09:21 所属栏目:安全 来源:网络整理
导读:我有格式化输入字段的问题,而使底层作用域变量未格式化。 我想要实现的是一个显示货币的文本字段。它应该在运行时格式化,同时处理错误的输入。我得到了这个工作,但我的问题是我想要存储我的范围变量中的非格式的值。输入的问题是它需要一种可以同时进行两
我有格式化输入字段的问题,而使底层作用域变量未格式化。

我想要实现的是一个显示货币的文本字段。它应该在运行时格式化,同时处理错误的输入。我得到了这个工作,但我的问题是我想要存储我的范围变量中的非格式的值。输入的问题是它需要一种可以同时进行两种方式的模型,所以改变输入域会更新模型,反之亦然。

我来到了$ parser和$ formatters,这似乎是我正在寻找的。不幸的是,他们并没有互相影响(这可能实际上是避免无休止的循环)。

我创建了一个简单的jsFiddle:http://jsfiddle.net/cruckie/yE8Yj/,代码如下:

HTML:

<div data-ng-app="app" data-ng-controller="Ctrl">
    <input type="text" data-currency="" data-ng-model="data" />
    <div>Model: {{data}}</div>
</div>

JS:

var app = angular.module("app",[]);

function Ctrl($scope) {
    $scope.data = 1234567;
}

app.directive('currency',function() {
    return {
        restrict: 'A',require: 'ngModel',link: function (scope,element,attr,ctrl) {

            ctrl.$formatters.push(function(modelValue) {
                return modelValue.toString().replace(/B(?=(?:d{3})+(?!d))/g,',');
            });

            ctrl.$parsers.push(function(viewValue) {
                return parseFloat(viewValue.replace(new RegExp(",","g"),''));
            });
        }
    };
});

再次,这只是一个简单的例子。当它加载所有的外观,因为它应该。输入字段被格式化,变量不是。但是,当更改输入字段中的值时,它不再自己格式化 – 但变量可以正确更新。

有没有办法确保文本字段被格式化,而变量不是?我想我正在寻找的是一个文本字段的过滤器,但我看不到找到任何东西。

最好的祝福

这是一个小提琴,显示我在应用程序中如何实现完全相同的行为。我最后使用ngModelController#render而不是$ formatters,然后添加一组单独的行为,这些行为在keydown和change事件触发。

http://jsfiddle.net/KPeBD/2/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读