14

ビルドイン ディレクティブなど、任意のモジュールで使用できる特定のモジュールにリンクせずにディレクティブを作成するにはどうすればよいですか。

4

4 に答える 4

8

短い答え: いいえ、それは不可能です。すべてのディレクティブは、モジュールの一部である必要があります。

Angularのドキュメントによると

コントローラーと同様に、ディレクティブはモジュールに登録されます。ディレクティブを登録するには、module.directive API を使用します。module.directive

モジュールの外でディレクティブを定義する方法はありません。

Angular の組み込みディレクティブは、それらが呼ばれるモジュールで定義されています。ソース コードngを参照してください。

このモジュールは、Angular の内部メソッドを使用して作成されますsetUpModuleLoader( AngularPublic.jsおよびloader.jsを参照)。

この関数は Angular パブリック API の一部ではないため、自分でアクセスすることはできません。独自のモジュールでディレクティブを定義する必要があります。このモジュールに依存するアプリ モジュールはすべて、ディレクティブを使用できます。

これは非常に Angular 的な見方です。公開オブジェクトを避け、可能な限り注入可能にします。

于 2013-11-19T12:48:35.717 に答える
8

OPの意味は理解できたと思います。Angular UI for Bootstrap のようなライブラリに似ています。OP は、メインのアプリ名を知らなくても他のアプリで使用できるディレクティブなどを作成したいと考えています。

これは次のように行うことができます。

angular.module("hello.world", [])
  .directive('hello', function() {
    return {
      template: '<p>Hello, world!</p>',
      restrict: 'E',
      link: function (scope, element, attrs) {}
    };
  });

たとえば、「hello-world.js」として保存します。

その JS をページに必ず含めてください。次に、メインの Angular アプリ内で:

var app = angular.module("myApp", ['hello.world']);

次に、app スコープの下の HTML の任意の場所に、次を挿入できます。

<hello></hello>

そして、そのディレクティブは、「Hello, world!」という単語を含む段落タグのレンダリングを引き継ぎます。内部。

私の理解では、サービス、ファクトリ、プロバイダーなど、すべての Angular オブジェクトでこれを行うことができます。

于 2014-08-21T01:59:24.577 に答える