5

ディレクティブでコードの繰り返しを減らそうとしています。手動で定義するのではなく、ディレクティブを生成するヘルパー関数を書きたいと思います。ディレクティブの定義を次のように変更します。

mydirectiveBuilder(function myButton(){
  return {
    scope: {
      toggle: "@pressed"
    }
  };
});

これがどこに行くべきかわかりません(窓から吊るす以外)。angular は、これらの種類のメソッドの場所を提供しますか?

4

5 に答える 5

5

Angular は何も提供しませんがangular、独自のヘルパー関数の名前空間として使用します。あなたは単に同じことをすることができます:

var myApp = (function() {
    // private function, not visible from the outside
    function privateFunction() {
        ...
    }

    function mydirectiveBuilder() {
       ...
       // you can use privateFunction here
    }

    return {
        mydirectiveBuilder: mydirectiveBuilder;
    };
})();

そしてあなたのディレクティブで:

myApp.mydirectiveBuilder(function myButton(){
    return {
        scope: {
            toggle: "@pressed"
        } 
    };
});
于 2013-08-11T10:57:16.400 に答える
5

@JB Nizetが提案することを行うか、グローバルスコープのようなものを公開するという考えが気に入らない場合はmyApp、関数をどこかに配置してから、すべてをビルドステップとしてクロージャーにラップします。

ファイル:directiveHelpers.js

function myDirectiveBuilder(){
}

ファイル: someDirective.js

myDirectiveBuilder(function myButton(){
    return {
        scope: {
            toggle: "@pressed"
        } 
    };
});

次に、ビルドステップとしてすべてのファイルを連結し、最終ビルドステップとしてその周りにクロージャーを配置して、基本的に次のようにします。

ファイル: app.js

(function(){

    function myDirectiveBuilder(){
    }

    myDirectiveBuilder(function myButton(){
        return {
            scope: {
                toggle: "@pressed"
            } 
        };
    });
})();

この手法は、コード ベース全体で Angular 自体によって使用されます。

于 2013-08-11T11:18:52.987 に答える
2

私は、これらのユーティリティをグローバル スコープに入れることに反対しています。これは非常に悪い習慣です。私が合理的だと思ったオプションの 1 つは、サービスを使用してこれらのユーティリティを宣言し、必要に応じて依存関係として注入することです。これは、グローバル スコープを汚染することなく、必要に応じてライブラリをインポートするのと似ています。

angular.
  module('phonecatApp').
  factory('strHelpers', [
    function () {
      return {
        snippingStr: function(str) {
          return str.substring(1,20) + "...";
        }
      }
  }])

使用法:

function usage(strHelpers) {
  console.info("Demonstrating console.log and helper function: " +
    strHelpers.snippingStr("111111111122222222223333333333"));
}

これは、Matt Way によって提案されてい ます。

于 2016-07-15T06:04:36.297 に答える