2016-09-21 14 views
0

angularJsのチェックボックスオプションを使用してネストされたツリー構造を作成しています。Angularjs:同じオブジェクトデータが同じ動作をしている2つの異なるスコープ

バックエンドのオブジェクトは次のとおりです。私は今、私はNG-含んで要素内ngのリピートを使用していた別の名前

$scope.a = object; 
$scope.b = object; 

と2 $スコープ変数に同じオブジェクトを割り当てた

{ 
"2": { 
    "id": 2, 
    "name": "Under Graduate", 
    "slug": "under-graduate", 
    "parent_id": 0, 
    "level": 0, 
    "path": "0", 
    "show": false, 
    "selected": false, 
    "children": { 
     "3": { 
      "id": 3, 
      "name": "B.Com", 
      "slug": "b-com", 
      "parent_id": 2, 
      "level": 1, 
      "path": "2", 
      "show": false, 
      "selected": false, 
      "children": { 
       "4": { 
        "id": 4, 
        "name": "Commerce", 
        "slug": "commerce", 
        "parent_id": 3, 
        "level": 2, 
        "path": "2\/3", 
        "show": false, 
        "selected": false 
       } 
      } 
     } 
    } 
} 

}

<li ng-repeat="a in a.children" ng-include="'a_tree_renderer.html'"></li> 

同じ方法を使用します。w (b)

<li ng-repeat="b in b.children" ng-include="'b_tree_renderer.html'"></li> 

テンプレート内には、すべての子を展開して表示するオプションがあります。

1つのテンプレートに対してこの操作を実行する場合を除いて、ツリーアルゴに関連するものはすべて正常に動作します。 b、どういうわけか、テンプレート(a)のインデックスも変わります。つまり、2番目のテンプレートから1番目のテンプレートの同じものを展開し、その逆も同様です。

+0

あなたが言及している "操作"が持つスコープ変数にどのような影響があるかを知ることは役に立ちます。 – austinbruch

+0

$ scope.a.show&$ scope.b.showはfalseと同じです。$ scope.b.show = trueを変更すると、$ scope.a.showもtrueに変更されます。 –

+0

'$ scope.a'と' $ scope.b'は同じオブジェクトを参照しているため、いずれかの変更は他のオブジェクトにも影響します。それらを独立させたい場合は、[angular.copy](https://docs.angularjs.org/api/ng/function/angular.copy)を調べることをお勧めします。 – austinbruch

答えて

0

$scope.a = object;$scope.b = object;を割り当てて、$scope.a$scope.bの両方が同じオブジェクトを参照します。したがって、一方を変更すると他方に影響します。

あなたは$scope.a$scope.bは独立しになりたい場合は、各スコープ変数はangular.copyを使用して、オブジェクトの別のコピーを参照するように、あなたは、オブジェクトのディープコピーを作成することができます。そうすれば、$scope.aまたは$scope.bで何かを変更すると、もう一方は影響を受けません。

+0

これは機能しました!方向性に感謝します。 –

+0

素晴らしいです、私は助けて嬉しいです!この回答があなたの問題を解決した場合は、それを合格とマークしてください。 – austinbruch

関連する問題