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';
}
});
Может кто-нибудь объяснить, что происходит здесь, если я копирую свойство объектов, он остается в синхронизации с root. Если я копирую объект, он будет "не синхронизирован", переменная не работает вообще. Правильно ли я предполагаю, что все, что находится за пределами Redbox, является корнеплодом?
$rootScope.o={firstName:'john'};
...
$scope.o.firstName='Fred';
До сих пор $scope
не имеет свойства o
. Поэтому, когда вы $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
. Они не имеют ничего общего друг с другом.