使用ngModelController和$ formatters

时间:2014-03-31 17:51:56

标签: javascript angularjs

我有一个文字输入。它应该取一个数字并将其格式化为视图的货币,同时保持模型中的数值。我有文本输入本身和上/下按钮。

这就是我所拥有的:

if (angular.isDefined(ngModel)) {
  ngModel.$formatters.push(function(value) {
    var input;
    if (isNaN(value)) {
      return '';
    } else {
      value = format(value, formatStr);
      input = elm.children().find('input');
      return input.val(value);
    }
  });
}

它被调用,我从format得到了正确的值。

我尝试使用$render$setViewModel和其他我能想到的事情,但无济于事。任何人都有任何想法?

1 个答案:

答案 0 :(得分:0)

这就是我最终做的事情:

app.directive('format', function(format) {
  return {
    restrict: 'A',
    require: '?ngModel',
    link: {
      pre: function(scope, elm, attr, ngModel) {
        var formatStr;
        formatStr = attr.format;
        if (angular.isDefined(ngModel)) {
          ngModel.$formatters.push(function(value) {
            if (angular.isNumber(value)) {
              return value = format(value, formatStr);
            }
          });
          ngModel.$parsers.unshift(function(value) {
            if (isNaN(value)) {
              value = ngModel.$modelValue;
            }
            return +value;
          });
          return elm.on('blur', function() {
            if (isNaN(elm.val())) {
              return elm.val(format(+ngModel.$modelValue, formatStr));
            } else {
              return elm.val(format(+elm.val(), formatStr));
            }
          });
        }
      }
    }
  };
});