2016-01-22 6 views
9

なしAngularAMDを使用してください。は、どのように私はAngularAMDアプリを持っている、と私はそのアプリ(それはそのディレクティブが「住んでいる」とは、角度モジュールである)上の(RequireJSの意味での)依存ディレクティブを持つルート

Iルーティングを使用し、ルーティングされたビュー内のディレクティブを使用する場合は、ディレクティブを含むファイルに依存controllerUrlを含むルートがあります。

私がいない場合は、...

まあ、それはenragingly円です。私はそれが指示に依存していることをアプリに伝えれば、私は循環依存を得る。私がそうしなければ、Angularは指令について知らず、タグは無視されます。

AngularAMDから全体コントローラ分解メカニズムを再現するショート、私はこれを行うことになっ方法はありますか?私は2例があり得ることだと思い

+0

ディレクティブはアプリに依存するのはなぜですか?私はRequireJSを使用しませんでしたが、それは間違っています。多分アプリはその指示に依存すべきでしょうか?したがって、アプリケーションを読み込むと、ディレクティブがロードされます。また、問題を再現するコード例を投稿すると、問題を理解するのが簡単になります。 –

+0

ディレクティブはモジュール内になければなりません。アプリケーションはそのモジュールです。 – Malvolio

答えて

3

1)あなたのディレクティブは、スタンドアロンで、実際のアプリケーションで何かに依存しません。あなたは自分のモジュールにそれを置くことができる。この場合

(両方RequireJSと角度の面で):

// my-directive.js 
var module = angular.module('my-directive', []); 

module.directive('myDirective', [ 
    ... 
]); 

// app.js (depends on my-directive.js) 
var app = angular.module('myapp', ['my-directive']); 

このユースケースは、AngularAMDによってサポートされている、3rd Party AngularJS Modulesを参照してください。

2)あなたのディレクティブは、あなたのアプリケーション内の何かに依存します。この場合、同じモジュールに配置します(角度とRequireJSの両方で)。

// app.js 
var app = angular.module('myapp', []); 

app.directive('myDirective', [ 
    ... 
]); 

3)[更新]もう一つの解決策:AngularAMDも定義して負荷an application wide moduleする特殊なケースをサポートします。

+0

どちらの場合でも、アプリケーションをロードしたときにディレクティブのすべてのコードをロードする必要があり、Requireを使用する点が無効になります。 – Malvolio

+0

@Malvolioこれらの2つのケースでは、app.jsとdirective.jsの両方が最初から読み込まれるということですか?そして、「app.jsだけをロードし、必要なときにdirective.jsをロードする」のようにしたいのですか? –

+0

@Malvolio実際にAngularAMDはサードパーティのモジュールの読み込みをサポートしていますので、[this](https://github.com/marcoslin/angularAMD#3rd-party-angularjs-modules)を参照してください。 、それは動作するはずです。 [documentation](https://github.com/marcoslin/angularAMD#loading-applicationwide-module)には、あなたが望むものとまったく同じ特殊なユースケースがあります。 –

関連する問題