0

私は、分離スコープと一方向バインディング変数を持つディレクティブを持っています。 まだ、ディレクティブコントローラでその変数を変更すると、親スコープも更新されます。片方向のバインディングを更新した角1.5のディレクティブ親のスコープ

例コード:

function someDirective() { 
    return { 
     restrict: 'E', 
     replace: true, 
     scope: {}, 
     bindToController: { 
      parentVar: '<' 
     }, 
     templateUrl: templateUrl, 
     controller: directiveController, 
     controllerAs: 'vm' 
    } 
} 

function directiveController($scope) { 
    var vm = this; 

    $scope.$watchCollection('vm.parentVar', doSomething); 

    function doSomething(newCollection) { 
     var some_object = { 
      property1: 1, 
      property2: 2 
     }; 

     newCollection.unshift(some_object); 
    } 
} 

私はディレクティブで渡された変数を更新した後、私は私のアプリの他の部分でsome_objectを参照してください。

ありがとうございます。

答えて

0

parentVarは配列リファレンスであるため、追加するアイテムには両方の親コントローラからアクセスできます。

ディレクティブコントローラの変更を反映しないようにするには、アレイを操作する前にアレイをクローンする必要があります。

function directiveController($scope) { 
    var vm = this; 

    $scope.$watchCollection('vm.parentVar', doSomething); 

    function doSomething(newCollection) { 
     var clonedCollection = newCollection.slice(); 
     var some_object = { 
      property1: 1, 
      property2: 2 
     }; 

     clonedCollection.unshift(some_object); 
    } 
} 
+0

ありがとう、それは私がやったことです。 これは意図した動作ですか? – ND88

+0

はい。 '<' - 一方向バインディングは、ウォッチャーがこの変数の親スコープで設定されていないことを保証します。 –

関連する問題