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番目のテンプレートの同じものを展開し、その逆も同様です。
あなたが言及している "操作"が持つスコープ変数にどのような影響があるかを知ることは役に立ちます。 – austinbruch
$ scope.a.show&$ scope.b.showはfalseと同じです。$ scope.b.show = trueを変更すると、$ scope.a.showもtrueに変更されます。 –
'$ scope.a'と' $ scope.b'は同じオブジェクトを参照しているため、いずれかの変更は他のオブジェクトにも影響します。それらを独立させたい場合は、[angular.copy](https://docs.angularjs.org/api/ng/function/angular.copy)を調べることをお勧めします。 – austinbruch