それで、私はAngular 2.0への移行について読んで、ディレクティブ/コンポーネントが互いに通信できるより良い方法を理解しようとしていました.
ここでは、ディレクティブ間で情報を共有するために名前空間ベースの継承を利用することを提案するいくつかのガイドラインに従いました。( this )
$scope.someFunction() の代わりに、$scope.container.someFunction() を使用することをお勧めします。変数についても同様です。$scope.variable の代わりに、$scope.container.variable を使用します。
そのため、現在私のプロジェクトでは、互いに通信する必要があるディレクティブはほとんどありません (親子関係のほうが多い)。
そのため、 Angular 1.4に従って bindToController を使用して、親ディレクティブからすべての子ディレクティブにコンテナーを渡しています。
directive ('myDirective', function () {
return {
restrict: 'E',
scope: {},
bindToController: {
container: '='
},
controllerAs: 'ctrl',
templateUrl: 'components/my-page.html',
controller: MyController
};
そして、次のような親ディレクティブから渡します
<my-directive container="container"/>
バインドする必要がある変数がたくさんあるので、それらすべての変数をコンテナーに移動して、コンテナー全体をバインドするのは良いことですか? 何かのようなもの:
$scope.container = {
variable1: ...
variable2: ...
function1: ...
function2: ...
}
またはそれらを個別にバインドしますか?
bindToController: {
variable1: '=',
variable2: '=',
....
},
また、リンクを使用してバインドすることもできると読みましたが、これは私をさらに混乱させます。以下のリンクを使用する必要がありますか?または上記のようにbindToControllerでコンテナ全体をバインドしますか?
link: function($scope, $element, $attrs, controller) {
// access controller.container.variable1 here
}
適切な設計手法はありますか? 賛否両論、Angular2.0 への移行の容易さはありますか?
これは少し自由回答の質問であることは理解していますが、いくつかのガイダンス、一般的な慣行は本当に役に立ちます。