これはおそらく数回答えられたことがありますが、Angularドキュメントで指摘されることさえありますが、正しい'。ディレクティブコントローラと親スコープの間でデータを同期させる方法
私は、テーブルに項目をリストするディレクティブを、ユーザー定義のオブジェクトとともに持っています。私は、ディレクティブとディレクティブが存在するスコープの間でアイテムを同期させたいとします(たとえば、アイテムが親スコープに追加または削除された場合、それに応じてリストを更新したいと思います。リスト内で選択されている場合、私は親にこれを知りたがっています)。最後に、$ watchなしでデータがちょうど '働く'ように、共有メモリにしておきたいと思うなら、$ & $ dispatchを実行します。
は、私はこのようにそれを行うことができると思った:
指令:
{
restrict: 'E',
templateUrl: 'js/components/selectionList/component.selectionList.html',
controller: 'SelectionlistCtrl',
controllerAs: 'selecListCtrl',
scope: {
items: '='
},
link: (scope, element, attrs) => {
scope.selecListCtrl.items = scope.items;
}
}
HTML:
<selection-list items="vm.items" />
VMは、親スコープのコントローラであり、アイテムがの配列ですオブジェクト。これはちょっと機能しますが、選択リスト指示が含まれているビューを離れるとすぐに、リスト項目は再表示されません(リンク(...)機能は一度だけ実行されるためです)。ディレクティブがキャッシュされます)。
私は、ビューとディレクティブがキャッシュされていないことを確認してから動作させることができます。しかし、これを行うより良い方法でなければならないのですか?または私は幸運の外ですか? apply
、watch
を使用していません
を参照して動作します。バインディングを使用して、望ましい動作を簡単に実現できます。 'link'を使用する代わりに –
を使用する場合は、' bindToController:true'を使用してください。 – Claies
@Claiesが言ったことをやりなさい。詳細については、[AngularJS Comprehensive Directive API Reference - bindToController](https://docs.angularjs.org/api/ng/service/$compile#-bindtocontroller-)を参照してください。 – georgeawg