Angular.js格式化程序未在modelValue更改时触发

时间:2013-04-18 14:38:12

标签: javascript angularjs angularjs-directive formatter

http://plnkr.co/edit/HN1PBGRsK6xqT9pwXcKY?p=preview它应该是非常自我解释

ctrl.$formatters在我最初设置模型值时运行,但在我更新之后不会运行。

根据这个Have $formatters be called when view is first populated?,它应该在每次模型值发生变化时触发,那么有什么不对?感谢。

1 个答案:

答案 0 :(得分:2)

使用自然模型设定器scope[attrs.ngModel]代替setviewvalue。

app.directive('format', function($filter) {
  return {
    require: 'ngModel',
    link: function(scope, element, attrs, ctrl) {
    element.unbind('input').unbind('keydown').unbind('change');
        element.bind('blur', function() {
            if (element.val()) {
                scope.$apply(function() {
                    scope[attrs.ngModel] = element.val();
                });         
            }
        });

        ctrl.$formatters.unshift(function(modelValue) {
            if (modelValue) {
                var formatted = $filter('currency')(modelValue);
                return formatted;
            }
        });
    }
}
});

您还需要一个解析器才能正常工作。