我想在输入字段中添加过滤器,但它给出了错误..我想如果我在输入字段中键入1k,它会在输入字段(值)中显示文本1,000。换句话说,如果我键入1k ..它转换1k或删除/将1k更改为1000。

我尝试那样,但不起作用..这是我的代码

http://plnkr.co/edit/6E4pe6RO8WwhINTpEf27?p=preview

.filter('toNumber', function($filter) {

  var numberFilter = $filter('number');

  var dict = {
    k: 1000,
    l: 100000
  };

  var regex = /^([-+]?[0-9]*\.?[0-9]+)([kl])$/;

  return function(val, fraction) {
    var match;
    if(angular.isString(val) && (match = val.match(regex)) ) {
      val = match[1] * dict[match[2]];
    }

    return numberFilter(val, fraction || 0);

  };
});

最佳答案

在您的情况下,您不应该使用过滤器,因为它只是格式化值,而不是更改它。另外,ngModel是双向绑定,仅支持变量影响。

您可以改用指令:

JS(增加了Cameron Morrow建议的改进:)

.directive('toNumber', function(numberFilter) {
    var dict = {
      k: 1000,
      l: 100000
    };

    var regex = /^([-+]?[0-9,]*\.?[0-9]+)([kl])$/;

    return {
      require: 'ngModel',
      link: function link(scope, element, attr, ngModel) {
        scope.$watch(attr.ngModel, function(val) {
          var match;
          if(angular.isString(val) && (match = val.match(regex)) ) {
            val = match[1].replace(/,/g , "") * dict[match[2]];
            scope[attr.ngModel] = numberFilter(val, 0);
          }
        })
      }
    }
})


的HTML

<div ng-controller='cntrl'>
     <input type='text' to-number ng-model='user'>
</div>

关于javascript - 为什么过滤器在 Angular 输入字段中不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35063533/

10-13 01:31