This is due to how prototypal inheritance works.
When you ask for $scope.x
in the child controller, it checks to see if x is defined on its scope, and if not, looks for x in the parent scope.
If you assign to the child scope’s x
property, it only modifies the child scope.
An easy way to deal with this and get the sharing behavior is to use an object or an array.
function ParentCtrl($scope) {
$scope.model = {x: 5, y: 5};
}
function ChildCtrl($scope) {
$scope.update = function(x, y) {
$scope.model.x = x;
$scope.model.y = y;
};
}
Here, the changes will be visible in both scopes, because $scope.model
will refer to the same object in both parent and child scopes.
John Lindquist has a video on this.