Angularjs:具有相同对象数据的2个不同范围共享相同的行为

时间:2016-09-21 17:26:54

标签: javascript angularjs multidimensional-array treeview

我正在使用angularJs中的checkbox选项创建一个嵌套的树结构。

来自后端的我的对象如下。

 {
"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
                }
            }
        }
    }
}

}

我已将同一个对象分配给具有不同名称的2 $范围变量

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

现在我在 li 元素中使用了ng-repeat和ng-include,如下所示

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

使用与另一个变量(b)相同的方法

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

在模板中,他们是一个扩展和查看所有孩子的选项。

与树算法相关的所有内容都可以正常工作,除非我在一个模板ex上执行此操作。 b,不知何故,模板(a)索引也会发生变化,即如果从第二个模板扩展选项,则第一个模板上的相同内容会扩展,反之亦然。

1 个答案:

答案 0 :(得分:0)

通过分配$scope.a = object;$scope.b = object;$scope.a$scope.b都会引用同一个对象。因此,修改其中一个将影响另一个。

如果您希望$scope.a$scope.b独立,可以使用{{3}创建对象的深层副本,以便每个范围变量引用该对象的不同副本}。这样,当您更改$scope.a$scope.b上的任何内容时,其他内容都不会受到影响。