2
  • AngularJS アプリケーションの特定の問題について頭を悩ませています。

基本的に、サービスを介してデータのリストを取得するコントローラー「PageCtrl」があります。データは PageCtrl 内に保存されます。すべて正常に動作します - これまでのところとても良いです。

今私の問題: PageCtrl 内のデータの各オブジェクトに対して、ng-repeat を使用して、フェッチしたばかりの各データを表示します。

各 ng-repeat では、各オブジェクトに含まれるデータに応じて、正しいテンプレートを取得するために ng-include を使用します (基本的に、データはページに表示される要素のリストです。各要素には独自のテンプレートがあります)。コントローラ。

ng-include が新しいスコープを作成すると、作成されたすべての子スコープ/コントローラーは、$parent コントローラー - PageCtrl にあるため、データにアクセスできます。

ng-repeat/ng-include で作成された各コントローラーが、親のデータのリストにあるどのオブジェクトを表示するために使用する必要があるかを知る必要があることを除いて、すべて正常に動作します。

基本的に、私の ng-repeat では、$index を使用して、ng-include に含まれるコントローラーに渡したいと思います。しかし、私はそれを行うことはできません !ng-init を使用すると、ng-init 内のコードは親スコープで実行されます。私の元のPageCtrl。

ディレクティブを使用せずに、コントローラーに情報を渡して、親のどのデータオブジェクトを使用する必要があるかを知るにはどうすればよいですか?

MainCtrl のデータをループするコードは次のとおりです。

 <div ng-repeat="element in elements" >
      <ng-include src=" GetTemplateFromElement(element.type) " ng-init=" SetElementNo($index); "></ng-include>
 </div>

スニペットでは、含めるビューを返す MainCtrl で GetTemplateFromElement を呼び出します。含まれているビューで、どのコントローラーが作業を行うべきかを参照します。$index を使用して、含まれているコントローラーに、データ内のどのインデックスを使用する必要があるかを伝えようとしています。もちろん、コードは MainCtrl スコープで実行されます。ビューの例:

<div ng-controller="ElementDocumentCtrl">
    <div ng-bind-html-unsafe="element.document_content"></div>
 </div>

スニペットでは、「element.document_content」は ElementDocumentCtrl のスコープにあり、親である PageCtrl からデータをプルします。

PageCtrl (親コントローラー) のデータリストに含まれるディレクティブに、どのインデックスを取得する必要があるかを伝えるにはどうすればよいですか?

それらをすべてディレクティブにする必要があるとは言わないでください:)

みんなありがとう。

4

1 に答える 1