私はベストプラクティスをAngularJs 1.5アプリで採用しようとしています。すでに次Todd Motto'sとJohn Papa'sスタイルがAngularJSアプリ内でカプセル化されたディレクティブとルーティングを使用するための推奨される方法は何ですか?
を案内する事はある:私のアプリはngRouteを使用してのルートがあります。したがって、これは:
function RoutingConfig($routeProvider) {
$routeProvider
.when('/route1', {
controller: 'Ctrl1 as vm',
templateUrl: 'partials/route1.html',
resolve: { myCoolService: myCoolService } // to abbreviate
})
.when('/route2', {
controller: 'Ctrl2 as vm',
templateUrl: 'partials/route2.html'
})
.otherwise({redirectTo: '/route1'}):
}
angular
.module('myApp', ['ngRoute'])
.config(RoutingConfig);
です。ここまでは順調ですね。
それでは、角度2、に私の道で、私はディレクティブアプローチのすべてをカプセル化採用したい、としましょう。このようにして、AngularJS 1.5を使用して、のWebコンポーネントを作成します。私は右のプラクティスに従うてる場合
、私は私のroute1のためのディレクティブを作成し、直接そのディレクティブのためのコントローラを定義することができます。
function MyCoolDirective() {
var directiveDefObj = {
controller: Ctrl1,
controllerAs: 'vm',
scope: {
data: "=",
},
bindToController: true, // isolated scope
link: linkFnc // just declared to abbreviate
};
return directiveDefObj;
}
angular
.module('myApp')
.directive('MyCoolDirective', MyCoolDirective);
だから、はどこ私はコントローラを宣言する必要がありますか?ルーティング設定では?各指令の中に?私のために少し冗長な音を出します。上述したように、あなたの例を使用して
実際には2つの別個のコントローラがあります。 1つはルートのためのものであり、その中のすべてはテンプレートであり、もう1つはディレクティブのものであり、そのすべてはテンプレートです。ただし、ルートテンプレートがディレクティブのみを保持し、独自のロジックを持たないという目的がある場合は、コントローラを用意する必要はありません。しかし、実際には、特に、お互いの間で情報を共有する複数のディレクティブを使用する予定がある場合は、両方が必要になります。 – Claies
あなたは本当にルートコントローラをもう必要としません。ルートのテンプレートをディレクティブにして、すべてのコントローラロジックをディレクティブに入れることができます。例えば – rob
はい、これは私の考えです:複雑さを指令に移してください、そして、それは持っていません。(例えば、可能であればルーティングコントローラ。ディレクティブ間の通信(コンテナの外部ディレクティブと含まれる各要素の内部ディレクティブの典型的な例)を処理するために、内部ディレクティブに 'require'を使用できませんでしたか? – jorgeas80