2015-06-25 2 views
0

http://plnkr.co/edit/s64HhVM4b3U5CaMmxcYu?p=preview

var app = angular.module('plunker', []). 
    run(function($rootScope){ 
    $rootScope.foo='bar'; 
    $rootScope.o={firstName:'john'}; 
    }); 

app.controller('MainCtrl', function($scope) { 
    $scope.copyProp=function(){ 
    $scope.o.firstName='Fred'; 
    } 
    $scope.copyObj=function(){ 
    $scope.o={firstName:'Jack'}; 
    } 
     $scope.copyVar=function(){ 
    $scope.foo='test'; 
    } 
}); 

Может кто-нибудь объяснить, что здесь происходит, если я копирую свойство объектов он остается в синхронизации с корнем. Если я копирую объект, он будет «не синхронизирован», переменная не работает вообще. Правильно ли я предполагаю, что все, что находится за пределами Redbox, является корнеплодом?

ответ

0
$rootScope.o={firstName:'john'}; 
... 
$scope.o.firstName='Fred'; 

До сих $scope не имеет свойства o. Поэтому, когда вы обращаетесь к $scope.o, JavaScript ищет o в родительской области до области корня до тех пор, пока не найдет o. На данный момент $scope.oявляется$rootScope.o. Они не синхронизированы, они одинаковы.

$scope.o={firstName:'Jack'}; 

Теперь $scope получает свое собственное свойство o, что не зависит от $rootScope.o. Следовательно, $scope.o.firstName='Fred'; не изменяется $rootScope.o. Они не имеют ничего общего друг с другом.