2012-08-17 7 views
5

ちょうどAngularJSを使い始めました。AngularJS:templateUrlはコントローラの構築を守り、依存するコードブレーク

<outer> 
    <inner></inner> 
</outer> 

outer.html負荷inner.html前に、そしてノーがある場合:

angular.module('components', []) .directive('outer', function() { return { restrict: 'E', replace: true, transclude: true, scope: {}, link: function(scope) { ... }, controller: function($scope) { ... }, templateUrl: 'outer.html' // Note this }; }) .directive('inner', function() { return { require: '^outer', // And this restrict: 'E', ... link: function(scope, element, attrs, outerCtrl) { ... }, templateUrl: 'inner.html' }; }); 

は、次のようなHTMLで使用:のは、私は2つのディレクティブ、のいずれかのようなので、他を必要があるとしましょう問題は全くありません。
<outer>は正しく変換され、スコープとコントローラが割り当てられ、 <inner>はコントローラを正常に受信します。 <outer>のコントローラが作成されている、と それはエラーメッセージ 『::いいえコントローラ外エラー』で失敗する前に、逆の順序でテンプレート負荷もし

は、しかし<inner>がリンクされています。

サーバー側の負荷遅延をinner.htmlに接続しようとしましたが、最初にouter.htmlが読み込まれている限り、どこに問題はありません。同様に、outerのテンプレートをインライン化すると(templateUrlの代わりにtemplateを使用)、そのテンプレートが最初に利用可能になり、すべてがうまく機能します。

templateUrlを他のディレクティブで必要とされるディレクティブに使用する方法を知っている人はいますか?私の実際のコードでは、内部ディレクティブが外側のコントローラにアクセスできることが重要です。templateUrltemplateよりも好むと、前者はレイアウトを動作と区別し、コードが大きくなりました。

事前にお詫び申し上げます。これまでにお問い合わせいただきありがとうございました。私はスタックオーバーフローに関する同等の質問を見つけることができませんでした。

答えて

2

同じモジュール内に複数のディレクティブを定義する場合は、ディレクティブを実行する順序を優先する優先順位を割り当てることができます。あなたの場合には、内側に優先度を「外側」にします。したがって、テンプレートのロード時に関係なく、ディレクティブは順番に実行されます。

詳しくは、directiveの 'Directive Definition Object'を参照してください。

私はその答えを願っています。

しかし、「外側」コントローラーが「内部」コントローラーに依存していると言えば、それは良く見えません。私の個人的な意見では、コントローラは別のコントローラと結ばれてはいけません。あなたのユースケースについてはわかりませんが、2つのコントローラ間の依存関係を解消する方法が必要です。

+0

私はこの正確な問題を抱えていましたが、プライオリティレベルの調整は役に立ちませんでした(1.0.5でなく1.0.7ではありません)。私の場合は、コントローラに依存した '内側'であり、いくつかの '内部'があり、他の人に起こるものを必要とする(それは高度なアコーディオンです)ために、依存関係を破る簡単な方法はありません。 。 – ivarni

関連する問題