Comment puis-je prendre les changements de variables et les propager facilement vers la ParentCtrl malgré l'instanciation d'une "nouvelle" var dans la ChildCtrl ? Des points supplémentaires pour un minimum ou l'absence de $on's et $watch's (ce qui facilite l'implémentation).
ParentCtrl
-
ChildCtrl / ChildCtrl2 / ChildCtrl3 / ChildCtrl4
- Voir
Mes ChildCtrl sont juste assez différents pour que je ne puisse pas facilement abstraire une mise en page principale et une ng-view, mais ils dépendent tous des mêmes fonctions dans ParentCtrl.
$scope.searchTerms est défini dans ParentCtrl mais le champ de saisie avec ng-model='searchTerms' est dans la vue des contrôleurs enfants. Lorsque cette variable change, elle n'est pas reflétée dans le ParentCtrl, mais seulement dans les ChildCtrls.
Exemple : http://jsfiddle.net/JHwxP/22/
HTML partiel
<div ng-app>
<div ng-controller="Parent">
parentX = {{x}} <br/>
parentY = {{y}}<br/>
<div ng-controller="Child">
childX = {{x}}<br/>
childY = {{y}}<br/>
<a ng-click="modifyBothScopes()">modifyBothScopes</a><br>
<br>
The changes here need to appear in 'Parent'. <input ng-model='y'>
</div>
</div>
</div>
Contrôleurs
function Parent($scope) {
$scope.x= 5;
$scope.y= 5;
}
function Child($scope) {
$scope.modifyBothScopes= function() {
$scope.$parent.x++;
};
}
UPDATE
Je suis actuellement en train d'essayer une approche de service partagé : https://gist.github.com/exclsr/3595424
UPDATE
Essayer un système d'émission/diffusion
SOLVED Problème : J'enregistrais $scope.searchTerms dans le parent et quand il était modifié, cela créait un espace dans l'enfant $scope.
La solution : J'aurais dû faire $scope.search.terms dans le parent et quand il était modifié dans l'enfant, il était répercuté dans le parent.
Exemple : http://jsfiddle.net/JHwxP/23/