私の質問は、AngularJS アプリケーションでテンプレート(部分テンプレートとも呼ばれます)の複雑なネストをどのように処理するかということです。
私の状況を説明する最良の方法は、私が作成した画像を使用することです。
ご覧のとおり、これは多数のネストされたモデルを持つかなり複雑なアプリケーションになる可能性があります。
アプリケーションは単一ページなので、属性を持つ DOM 内の div 要素を含むindex.htmlng-view
を読み込みます。
円 1 には、適切なテンプレートを に読み込むプライマリ ナビゲーションがありますng-view
。メイン アプリ モジュールに渡すことでこれを行っています$routeParams
。私のアプリの内容の例を次に示します。
angular.module('myApp', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
when("/job/:jobId/zones/:zoneId", { controller: JobDetailController, templateUrl: 'assets/job_list_app/templates/zone_edit.html' }).
when("/job/:jobId/initial_inspection", { controller: JobDetailController, templateUrl: 'assets/job_list_app/templates/initial_inspection.html' }).
when("/job/:jobId/zones/:zoneId/rooms/:roomId", { controller: JobDetailController, templateUrl: 'assets/job_list_app/templates/room_edit.html' })
}]);
円 2 では、に読み込まれるテンプレートにng-view
追加のサブナビゲーションがあります。このサブナビゲーションは、その下の領域にテンプレートを読み込む必要がありますが、ng-view がすでに使用されているため、これをどのように実行すればよいかわかりません。
最初のテンプレート内に追加のテンプレートを含めることができることはわかっていますが、これらのテンプレートはすべてかなり複雑になります。アプリケーションの更新を容易にし、子にアクセスするために親テンプレートをロードする必要がないようにするために、すべてのテンプレートを別々に保持したいと思います。
円3では、状況がさらに複雑になっていることがわかります。サブナビゲーションテンプレートには、円4の領域に独自のテンプレートを読み込む必要がある2番目のサブナビゲーションが含まれる可能性があります。
テンプレートの複雑なネストを処理しながら、それらをすべて互いに分離したままにする AngularJS アプリの構造化はどのようにすればよいのでしょうか?
ベストアンサー1
アップデート: この問題に対処するためのAngularUIの新しいプロジェクトをチェックしてください
サブセクションの場合は、ng-include で文字列を活用するのと同じくらい簡単です。
<ul id="subNav">
<li><a ng-click="subPage='section1/subpage1.htm'">Sub Page 1</a></li>
<li><a ng-click="subPage='section1/subpage2.htm'">Sub Page 2</a></li>
<li><a ng-click="subPage='section1/subpage3.htm'">Sub Page 3</a></li>
</ul>
<ng-include src="subPage"></ng-include>
または、サブページへのリンクがあちこちにある場合は、オブジェクトを作成することもできます。
$scope.pages = { page1: 'section1/subpage1.htm', ... };
<ul id="subNav">
<li><a ng-click="subPage='page1'">Sub Page 1</a></li>
<li><a ng-click="subPage='page2'">Sub Page 2</a></li>
<li><a ng-click="subPage='page3'">Sub Page 3</a></li>
</ul>
<ng-include src="pages[subPage]"></ng-include>
あるいは、$routeParams
$routeProvider.when('/home', ...);
$routeProvider.when('/home/:tab', ...);
$scope.params = $routeParams;
<ul id="subNav">
<li><a href="#/home/tab1">Sub Page 1</a></li>
<li><a href="#/home/tab2">Sub Page 2</a></li>
<li><a href="#/home/tab3">Sub Page 3</a></li>
</ul>
<ng-include src=" '/home/' + tab + '.html' "></ng-include>
各部分ノードの最上位にng-controllerを配置することもできます。