Вы должны понимать, как работает наследование прототипов.Когда родитель помещает значение свойства в область с помощью
$scope.value = 'something';
В дочернем компоненте при доступе к $ scope.value цепочка наследования найдет $ scope.value.
Если дочернийустанавливает
$scope.otherValue = 'something';
Если следует по цепочке наследования, не находит значение otherValue и создает свойство в дочерней области, а не в унаследованном прототипе, поэтому родительский компонент и любые другие дочерние элементы родителя непосмотрите.
Вы можете использовать то, что называется правилом точек наследования прототипов.Если родитель создает объект в области, называемый чем-то вроде данных
$scope.data = { value: 'something' };
Теперь, если дочерний объект помещает свойство в объект данных
$scope.data.otherValue = 'something';
Он ищет объект данных, находитоно находится в цепочке наследования, и поскольку вы добавляете свойство к экземпляру объекта, оно становится видимым для родителя и всех потомков родителя.
let parent = {
value: 'some value',
data: { value: 'some value' }
};
let child = Object.create(parent);
console.log(child.value); // Finds value on the prototype chain
child.newValue = 'new value'; // Does not affect the parent
console.log(parent.newValue);
child.data.newValue = 'new value'; // newValue is visible to the parent
console.log(parent.data.newValue);
Короткий ответ: никогда не вводить $ scope и использовать синтаксис controllerAs.
Для обмена данными между контроллерами вы используете сервис, который внедряется в оба контроллера.,У вас есть коллекция точек в службе и вы используете параметр маршрута, чтобы определить, какую точку должен использовать другой контроллер, или у вас есть место в службе с именем currentSpot, установленное другим контроллером.
Службы - это одноэлементный объект, который высоздать на уровне модуля, а затем все контроллеры, которые запрашивают их в своем списке зависимостей, получают один и тот же экземпляр.Они являются предпочтительным способом обмена данными между контроллерами, иерархии $ scope неизбежно приводят к путанице, поскольку их прототипное наследование может сбивать с толку.Дочерняя область $ $ унаследована по прототипу от его родителя, похоже, вам следует обмениваться данными, но когда дочерний контроллер устанавливает свойство, оно невидимо для родителя.
Вы изучаете устаревший способ углового программирования,Внедрение $ scope больше не рекомендуется.Посмотрите на использование компонентов.Компоненты являются оболочкой для контроллера с изолированной областью действия и с использованием синтаксиса contollerAs.Изолированные области видимости значительно упрощают понимание того, откуда поступают данные.
Посмотрите на мой ответ на этот вопрос
Попытка активировать флажок из контроллера, который находится в другом контроллере