--- Je sais que cette réponse n'est pas pour cette question, mais je veux que les gens qui lisent cette question et veulent gérer des services tels que les usines pour éviter tout problème ----
Pour cela, vous devrez utiliser un service ou une usine.
Les services sont la MEILLEURE PRATIQUE pour partager des données entre des contrôleurs non imbriqués.
Une très très bonne annotation sur ce sujet concernant le partage de données est de savoir comment déclarer des objets. J'ai été malchanceux parce que je suis tombé dans un piège AngularJS avant de lire à ce sujet et j'étais très frustré. Alors laissez-moi vous aider à éviter ce problème.
J'ai lu dans le "ng-book: Le livre complet sur AngularJS" que les modèles AngularJS ng créés dans les contrôleurs en tant que données nues sont faux!
Un élément $ scope doit être créé comme ceci:
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// best practice, always use a model
$scope.someModel = {
someValue: 'hello computer'
});
Et pas comme ça:
angular.module('myApp', [])
.controller('SomeCtrl', function($scope) {
// anti-pattern, bare value
$scope.someBareValue = 'hello computer';
};
});
En effet, il est recommandé (MEILLEURE PRATIQUE) pour le DOM (document html) de contenir les appels comme
<div ng-model="someModel.someValue"></div> //NOTICE THE DOT.
Ceci est très utile pour les contrôleurs imbriqués si vous voulez que votre contrôleur enfant puisse changer un objet du contrôleur parent ....
Mais dans votre cas, vous ne voulez pas d'étendues imbriquées, mais il existe un aspect similaire pour obtenir des objets des services vers les contrôleurs.
Disons que vous avez votre service 'Factory' et dans l'espace de retour il y a un objectA qui contient objectB qui contient objectC.
Si à partir de votre contrôleur vous voulez OBTENIR l'objectC dans votre portée, c'est une erreur de dire:
$scope.neededObjectInController = Factory.objectA.objectB.objectC;
Cela ne fonctionnera pas ...
Utilisez plutôt un seul point.
$scope.neededObjectInController = Factory.ObjectA;
Ensuite, dans le DOM, vous pouvez appeler objectC à partir de objectA. Il s'agit d'une meilleure pratique liée aux usines et, plus important encore, elle aidera à éviter les erreurs inattendues et non capturables.