angularJS: Comment appeler l'enfant du champ d'application de la fonction de parent
Comment pouvez appeler une méthode définie dans l'enfant de son parent?
function ParentCntl() {
//I want to call the $scope.get here
}
function ChildCntl($scope) {
$scope.get = function() {
return "LOL";
}
}
- Meilleur pari, définir un service, à injecter de ce service dans les deux contrôleurs. Ou utiliser rootscope.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
$de diffusion
de la mère à l'enfant:De travail violon: http://jsfiddle.net/wUPdW/2/
Mise à JOUR: Il y a une autre version, moins couplée et plus testable:
Violon: http://jsfiddle.net/uypo360u/
$scope.$parent
ou dans$scope.$parent.$parent
, etc)? Ah, oui: passer un rappel dans les params! 🙂$emit
d'un enfant à un parent. je pense qu'il est temps de mettre à jour ma réponse..$parent
)$broadcast
et$emit
sont synchrones, d'autre de ces approches ne fonctionnent pas. Il n'y a rien dans le documentation qui dit qu'ils sont nécessairement synchrone de par leur conception, soit$broadcast
et vous pouvez éliminer lespingBack
tout à fait.pingBack
ni que$scope.msg
. Vous pouvez passer aussi un argument objet de$broadcast
, si vous n'aimez pas l'idée de transmission fonction de rappel.Permettez-moi de suggérer une autre solution:
Moins de code et l'utilisation de l'héritage par prototype.
Plunk
$scope.obj.get()
est une fonction valide.Registre de l'enfant en fonction sur le parent lorsque l'enfant est en cours d'initialisation. J'ai utilisé "que" la notation pour plus de clarté dans le modèle.
MODÈLE
CONTRÔLEURS
"Mais", dites-vous, "
ng-init
ce n'est pas censé être utilisé de cette façon!". Eh bien, oui, maisJe dis que c'est à bon escient. Si vous voulez downvote moi, s'il vous plaît commenter avec les motifs! 🙂
J'aime cette approche, car elle conserve les composants plus modulaire. Les seules liaisons sont dans le modèle, et signifie que
Cette approche plus près de Tero l'idée de modularising avec les directives (noter que, dans son modularisé exemple,
contestants
se transmet de parent à enfant "à la" directive DANS LE MODÈLE).En effet une autre solution pourrait être de considérer la mise en œuvre de la
ChildCntl
comme une directive et d'utiliser le&
de liaison pour enregistrer leinit
méthode.Vous pouvez faire l'objet enfant.
Ici, l'enfant est la preuve de la destination de la méthode get.