ビューは構成を決定するべきではありません
Angular では、テンプレートが構成を指示することはありません。これは、テンプレート ファイルからコントローラーに引数を渡したいときに本質的に要求されるものです。滑りやすい坂道になります。構成設定がテンプレートにハードコーディングされている場合 (ディレクティブやコントローラー引数属性などによって)、そのテンプレートを 1 回の使用以外に再利用することはできなくなります。すぐにそのテンプレートを再利用する必要がありますが、構成が異なります。そのためには、テンプレートを前処理して、angular に渡される前に変数を挿入するか、大規模なディレクティブを使用して巨人を吐き出します。ラッパー div とその引数を除いて、すべてのコントローラー HTML を再利用できます。小規模なプロジェクトの場合、大したことではありません。大きなもの (angular が優れているもの) の場合、すぐに醜くなります。
代替手段: モジュール
このタイプの構成は、モジュールが処理するように設計されたものです。多くのAngularチュートリアルでは、アプリケーション全体に対して単一のモジュールがありますが、実際には、システムは設計されており、アプリケーション全体の小さな部分をそれぞれラップする多くの小さなモジュールを完全にサポートしています. 理想的には、コントローラー、モジュールなどは別々のファイルで宣言され、特定の再利用可能なチャンクにまとめられます。アプリケーションがこのように設計されている場合、簡単なコントローラー引数に加えて、多くの再利用が可能になります。
以下の例には 2 つのモジュールがあり、同じコントローラーを再利用していますが、それぞれに独自の構成設定があります。その構成設定は、を使用して依存性注入を介して渡されますmodule.value
。コンストラクタ依存性注入、再利用可能なコントローラ コード、再利用可能なコントローラ テンプレート (コントローラ div は ng-include で簡単に含めることができます)、HTML なしで簡単に単体テスト可能なシステム、そして最後に再利用可能なものがあるため、これは角度のある方法に準拠しています。ピースをつなぎ合わせる手段としてのモジュール。
次に例を示します。
<!-- index.html -->
<div id="module1">
<div ng-controller="MyCtrl">
<div>{{foo}}</div>
</div>
</div>
<div id="module2">
<div ng-controller="MyCtrl">
<div>{{foo}}</div>
</div>
</div>
<script>
// part of this template, or a JS file designed to be used with this template
angular.element(document).ready(function() {
angular.bootstrap(document.getElementById("module1"), ["module1"]);
angular.bootstrap(document.getElementById("module2"), ["module2"]);
});
</script>
<!-- scripts which will likely in be in their seperate files -->
<script>
// MyCtrl.js
var MyCtrl = function($scope, foo) {
$scope.foo = foo;
}
MyCtrl.$inject = ["$scope", "foo"];
// Module1.js
var module1 = angular.module('module1', []);
module1.value("foo", "fooValue1");
module1.controller("MyCtrl", MyCtrl);
// Module2.js file
var module2 = angular.module('module2', []);
module2.value("foo", "fooValue2");
module2.controller("MyCtrl", MyCtrl);
</script>
実際に見てみましょう: jsFiddle。