0

嗨,我需要一个 AngularJS Wiz 来为我指明正确的方向,我一直在尝试了解 AngularJS 范围和继承。我有一个子作用域,我将它添加到父作用域,然后我想通过 array.push() 将一个新对象添加到父作用域;但我不确定为什么 Child 范围会继承这个新值。请参阅此处的小提琴http://jsfiddle.net/sjmcpherso/EFxuZ/第一个使用 ng-repeat 和对象的示例会导致孩子更新:

$scope.childArr = [{'name':'peter'},{'name':'paul'},{'name':'perry'}];
$scope.parentArr = $scope.childArr;
$scope.parentArr.push({'name':'Why am I in now in the Child Array?'}) 

而仅使用变量的第二个示例没有:

$scope.childVar = "Confused Muchly";
$scope.test.parentVar = $scope.childVar;
$scope.test.parentVar = "This wont change the child variable";

理想情况下,我想对子范围进行更改,这将更新父范围,而不是相反。

我已经阅读了https://github.com/angular/angular.js/wiki/Understanding-Scopes,虽然没有完全理解这个问题对我来说似乎是个谜。

4

1 回答 1

2

首先,您的两个模型$scope.childArr$scope.test.parentArr在控制器的 $scope 中。它们都不在父范围内。

如果你想parentArr在父范​​围内,那么你应该有一个父子控制器设计或将你的模型移动到rootScope

$rootScope.test = {};
$rootScope.test.parentArr = [ /* some items here */ ];

其次,$scope.childArr两者$scope.test.parentArr都指向同一个数组。改变其中任何一个就意味着改变他们两个。

这几乎与这样做相同:

$scope.test = {};
$scope.childArr = $scope.test.parentArr = [
    {'name':'peter'},
    {'name':'paul'},
    {'name':'perry'}
];

如果您想创建单独的副本以便更改其中一个不会影响另一个,那么您可以使用angular.copy()

$scope.test.parentArr = angular.copy($scope.childArr);
于 2013-08-13T10:11:10.243 回答