在角度ngModelController。$ formatter中转换数据与在ngModelController期间转换它之间的区别是什么。$ render?

时间:2016-02-26 22:44:24

标签: angularjs angular-ngmodel

在为视图转换数据时,我应该何时介绍ngModelController。$ formatter的复杂性?

换句话说,在以下(人为设想的)例子中,资本化者比资本化者B更好吗? ' A'感觉更加惯用,但我找不到明显的优势。

var app = angular.module('capitalizerApp', [])

app.controller('capitalizerCtrl', function($scope) {
  $scope.name = 'jake';
});

/*
*  capitalizerA
*/
app.directive('capitalizerA', function() {
  return {
    restrict: 'E',
    require: 'ngModel',
    link: function(scope, element, attrs, ngModelCtrl) {
      let _capitalizerFormatter = function(value) {
        return value.toUpperCase();
      }

      ngModelCtrl.$formatters.push(_capitalizerFormatter);

      ngModelCtrl.$render = function() {
        scope.capsName = ngModelCtrl.$viewValue;
      }
    }
  }
});

/*
*  capitalizerB
*/
app.directive('capitalizerB', function() {
  return {
    restrict: 'E',
    require: 'ngModel',
    link: function(scope, element, attrs, ngModelCtrl) {
      ngModelCtrl.$render = function() {
        scope.capsName = scope.name.toUpperCase();
      }
    }
  }
})

请参阅以下工作示例:http://codepen.io/telekid/pen/oxNxPM?editors=1010

1 个答案:

答案 0 :(得分:1)

我认为你不是在“增加复杂性”。无论您使用哪种功能,都会引入NgModelController。我认为这样做的原因很少超出$ validator管道。我发现过滤器可以做很多事情,可能会试图使用$ formatters管道。

那说,有用,我认为放置逻辑的最合适的地方是$ parsers或$ formatters数组。