2017-01-02 6 views
0

これはおそらく数回答えられたことがありますが、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は、親スコープのコントローラであり、アイテムがの配列ですオブジェクト。これはちょっと機能しますが、選択リスト指示が含まれているビューを離れるとすぐに、リスト項目は再表示されません(リンク(...)機能は一度だけ実行されるためです)。ディレクティブがキャッシュされます)。

私は、ビューとディレクティブがキャッシュされていないことを確認してから動作させることができます。しかし、これを行うより良い方法でなければならないのですか?または私は幸運の外ですか? applywatchを使用していません

+0

を参照して動作します。バインディングを使用して、望ましい動作を簡単に実現できます。 'link'を使用する代わりに –

+1

を使用する場合は、' bindToController:true'を使用してください。 – Claies

+0

@Claiesが言ったことをやりなさい。詳細については、[AngularJS Comprehensive Directive API Reference - bindToController](https://docs.angularjs.org/api/ng/service/$compile#-bindtocontroller-)を参照してください。 – georgeawg

答えて

0

asolutionは、...このスレッドAngularJS: Parent scope is not updated in directive (with isolated scope) two way bindingそれは受け入れ答え以下の答えであるである、私は中にイベントを発行するためにここに

angular.module('app') 
.directive('navbar', function() { 
    return { 
     templateUrl: '../../views/navbar.html', 
     replace: 'true', 
     restrict: 'E', 
     scope: { 
      email: '=' 
     }, 
     link: function (scope, elem, attrs) { 
      scope.$on('userLoggedIn', function (event, args) { 
       scope.email = args.email; 
      }); 
      scope.$on('userLoggedOut', function (event) { 
       scope.email = false; 
       console.log(newValue); 

      }); 

     } 
    } 
}); 

$rootScope.$broadcast('userLoggedIn', user);それをコピーしますコントローラ.$emit.$on

より多くの情報が、これはまた、関心あるWorking with $scope.$emit and $scope.$on

でありますINGの:

https://blog.umur.io/2013/07/02/angularjs-directives-using-isolated-scope-with-attributes/多分

$route.reload()

(コントローラに$routeを注入)

は角1.5のコンポーネントの使用を検討してHow can I tell AngularJS to "refresh"

関連する問題