--- Я знаю, що ця відповідь не для цього питання, але я хочу, щоб люди, які читають це питання і хочуть звертатися до таких служб, як Фабрики, уникали проблем з цим ----
Для цього вам потрібно буде скористатися Сервісом або Заводом.
Служби - НАЙКРАЩА ПРАКТИКА для обміну даними між вкладеними контролерами.
Дуже хороша примітка до цієї теми про обмін даними - це як оголошувати об’єкти. Мені не пощастило, бо я потрапив у пастку AngularJS, перш ніж прочитати про це, і мене дуже засмутило. Тож дозвольте мені допомогти вам уникнути цієї неприємності.
Я читав з "ng-книги: Повна книга про AngularJS", що n-моделі AngularJS, які створюються в контролерах як голі дані, є НЕПРАВНИМ!
Елемент діапазону $ повинен бути створений так:
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// best practice, always use a model
$scope.someModel = {
someValue: 'hello computer'
});
І не так:
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// anti-pattern, bare value
$scope.someBareValue = 'hello computer';
};
});
Це тому, що DOM (найкращий ПРАКТИКА) рекомендує DOM (html-документ) містити дзвінки як
<div ng-model="someModel.someValue"></div> //NOTICE THE DOT.
Це дуже корисно для вкладених контролерів, якщо ви хочете, щоб ваш дочірний контролер міг змінити об'єкт від батьківського контролера ....
Але у вашому випадку ви не хочете вкладених областей застосування, але є аналогічний аспект, щоб отримати об’єкти від служб до контролерів.
Скажімо, у вас є служба "Фабрика", а в просторі повернення є об'єктA, який містить objectB, який містить objectC.
Якщо з вашого контролера ви хочете отримати об'єктC у вашу область, помилка сказати:
$scope.neededObjectInController = Factory.objectA.objectB.objectC;
Це не працює ...
Натомість використовуйте лише одну крапку.
$scope.neededObjectInController = Factory.ObjectA;
Потім у DOM ви можете викликати objectC від objectA. Це найкраща практика, пов'язана з фабриками, і найголовніше, це допоможе уникнути несподіваних та непридатних помилок.