5

機能のポイントは何ですか

function valueFn(value) {return function() {return value;};}

angular.js で定義されています。

exに使用しています。の

var lowercaseFilter = valueFn(lowercase);
register('lowercase', lowercaseFilter);

次のように小文字を直接使用した場合の違い

register('lowercase', lowercase);

前の行の代わりに。

同じように、メソッドで

function ngDirective(directive) {
  if (isFunction(directive)) {
    directive = {
      link: directive
    }
  }
  directive.restrict = directive.restrict || 'AC';
  return valueFn(directive);
}

最後の行がそうでない理由

return directive;

しかし

return valueFn(directive);
4

1 に答える 1

12

フィルター (およびその他のサービス) は通常の関数ですが、AngularJS は依存性注入に大きく依存しているため、これらのフィルター (関数) はそのまま (インスタンス化されたオブジェクトとして) クライアントに公開されるのではなく、ファクトリ関数によって作成されます。これは、AngularJS DI システムが依存関係をファクトリー関数に注入できるようにするためです (そして、これらの依存関係は後でクロージャーで使用可能になります)。

しかし、注入するものが何もなく、ファクトリ関数のジョブ全体が事前にインスタンス化された値を返すことになる場合があります。これはlowercaseFilter(および他の多くのフィルター) の場合です。そのため、同じ、ほとんど何もしないファクトリ関数を繰り返す代わりに、 valueFnコードの繰り返しを避けるために作成されました。それがなければ、AngularJS コードに以下を含める必要があります。

var lowercaseFilter = function(){
  return lowercase;
};
var uppercaseFilter = function(){
  return uppercase;
};
...

書くのはもっと簡潔です:

var lowercaseFilter = valueFn(lowercase);
var uppercaseFilter = valueFn(uppercase);
...

要するに、その理由はDRYだと思います。

于 2013-02-23T13:29:46.770 に答える