2013-08-13 3 views
0

안녕하세요, AngularJS Wiz가 올바른 방향으로 나를 가리 키도록 AngularJS 범위 및 상속 주위에서 머리를 얻으려고했습니다. 부모 범위에 자식 Scope를 추가 한 다음 array.push()를 통해 부모 범위에 새 객체를 추가하고 싶습니다. 하지만 왜 하위 범위가이 새로운 값을 상속하는지 확신 할 수 없습니다. 업데이트 할 아이를 NG 반복와 개체가 발생하여 여기에 바이올린 http://jsfiddle.net/sjmcpherso/EFxuZ/ 첫 번째 예를 참조하십시오AngularJS 범위 객체 상속

$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"; 

이상적으로 나는 싶습니다 부모 범위를 업데이트 할 자식 범위를 변경하지만 다른 방법은 변경하지 않습니다.

나는이 문제를 완전히 이해하지 못하고있는 동안 나는 을 읽었지만 내게는 신비한 것처럼 보인다.

답변

2

먼저 모델 $scope.childArr$scope.test.parentArr은 컨트롤러의 $ 범위에 있습니다. 그들 중 누구도 부모 범위에 없습니다. 상위 범위에 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); 
+0

고마워요, 그렇습니다. 내 용어가 틀렸어. 그들은 같은 범위에 있고 예 .2 개의 객체로 JS 프로토 타입 상속을 무시했는데 .copy()가 완벽하게 작동합니다. 그 문제를 해결해 주셔서 고맙습니다. – sjm