2013-08-13 2 views
0

Привет, мне нужен AngularJS Wiz, чтобы указать мне в правильном направлении, пытаясь окунуться в область AngularJS Scope и Inheritance. У меня есть дочерний объект Scope, который я добавляю в родительскую область, тогда я хочу добавить новый объект в область «Родитель» с помощью array.push(); но я не уверен, почему область Child затем наследует это новое значение. Смотрите скрипку здесь http://jsfiddle.net/sjmcpherso/EFxuZ/ Первый пример использования нг-повтора и объектов вызывает ребенка обновить:AngularJS Scope Object Inheritance

$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, хотя не полностью понял все, что этот вопрос мне кажется загадкой.

ответ

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

Спасибо, да, моя терминология неправильна, они находятся в одном объеме и да, я игнорировал наследование прототипа JS с двумя объектами и да .copy() отлично работает. Спасибо, что расчистили это – sjm

Смежные вопросы