首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >货币角度筛选器,允许输入负数

货币角度筛选器,允许输入负数
EN

Stack Overflow用户
提问于 2016-07-12 16:36:46
回答 1查看 1.7K关注 0票数 0

我有一个指令,通过添加小数点作为用户类型来过滤货币。

我的问题是它不允许有负面影响。如果允许用户输入一个“-”符号,并让它始终出现在数字的开头,或者键入a '+‘并让它消失,那就太好了。

需要:

  1. 将十进制字段格式化为用户类型
  2. 字段必须是数字。
  3. 必须允许负数-
  4. 允许0.00作为数字输入

看看我的柱塞。它有input = number,但不允许负数:

代码语言:javascript
复制
app.directive('format', ['$filter', function ($filter) {
    return {
        require: 'ngModel', //there must be ng-model in the html
        link: function (scope, elem, attr, ctrl) {
            if (!ctrl) return;

            ctrl.$parsers.unshift(function (viewValue, modelValue) {
                var plainNumber = viewValue.replace(/[^-+0-9]/g,'');

                // use angular internal 'number' filter
                plainNumber = $filter('number')(plainNumber / 100, 2).replace(/,/g, '');

                // update the $viewValue
                ctrl.$setViewValue(plainNumber);

                // reflect on the DOM element
                ctrl.$render();

                // return the modified value to next parser
                return plainNumber;
            });
        }
    };
}]);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-12 17:18:04

这将完成您希望它做的事情:

代码语言:javascript
复制
var app = angular.module('App',[]);

 app.controller('MainCtrl', function ($scope) {


});

 app.directive('format', ['$filter', function ($filter) {
 return {
            require: 'ngModel', //there must be ng-model in the html
            link: function (scope, elem, attr, ctrl) {
                if (!ctrl) return;

                ctrl.$parsers.unshift(function (viewValue, modelValue) {
                    var plainNumber = viewValue.replace(/[^-+0-9]/g,'');
                    var newVal = plainNumber.charAt(plainNumber.length-1);
                    var positive = plainNumber.charAt(0) != '-';
                    if(isNaN(plainNumber.charAt(plainNumber.length-1))){
                      plainNumber = plainNumber.substr(0,plainNumber.length-1)
                    }
                    //use angular internal 'number' filter
                    plainNumber = $filter('number')(plainNumber / 100, 2).replace(/,/g, '');
                    if(positive && newVal == '-'){
                      plainNumber = '-' + plainNumber;
                    }
                    else if(!positive && newVal == '+'){
                      plainNumber = plainNumber.substr(1);
                    }
                    plainNumber.replace('.', ',');
                    //update the $viewValue
                    ctrl.$setViewValue(plainNumber);
                    //reflect on the DOM element
                    ctrl.$render();
                    //return the modified value to next parser
                    return plainNumber;
                });
            }
        };

}]);

只需从以下位置删除type="number“:

代码语言:javascript
复制
<input ng-model="amount" format="number" />
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38334580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档