Comment appeler une méthode définie dans la portée enfant à partir de sa portée parent?
function ParentCntl() {
// I want to call the $scope.get here
}
function ChildCntl($scope) {
$scope.get = function() {
return "LOL";
}
}
angularjs
angularjs-scope
9 bleu
la source
la source
Réponses:
Vous pouvez utiliser
$broadcast
du parent à un enfant:Violon de travail: http://jsfiddle.net/wUPdW/2/
MISE À JOUR : Il existe une autre version, moins couplée et plus testable:
Violon: http://jsfiddle.net/uypo360u/
la source
$scope.$parent
ou dans$scope.$parent.$parent
, etc.)? Ah, oui: passez un callback en params! :)$emit
d'un enfant à un parent. Je pense qu'il est temps de mettre à jour ma réponse ..$parent
$broadcast
et vous pouvez éliminerpingBack
complètement le.Laissez-moi vous suggérer une autre solution:
Moins de code et utilisant l'héritage prototypique.
Plunk
la source
$scope.obj.get()
soit une fonction valide.Enregistrez la fonction de l'enfant sur le parent lors de l'initialisation de l'enfant. J'ai utilisé la notation «comme» pour plus de clarté dans le modèle.
MODÈLE
CONTRÔLEURS
"Mais", dites-vous, "
ng-init
n'est pas censé être utilisé de cette façon !". Eh bien, oui, maisJe dis que c'est une bonne utilisation pour cela. Si vous souhaitez me rejeter, veuillez commenter avec des raisons! :)
J'aime cette approche car elle garde les composants plus modulaires. Les seules liaisons se trouvent dans le modèle et cela signifie que
Cette approche approche plus étroitement l'idée de Tero de modulariser avec des directives (notez que dans son exemple modularisé,
contestants
est passée de la directive parent à la directive "enfant" DANS LE TEMPLATE).En effet, une autre solution pourrait être d'envisager de mettre en œuvre le
ChildCntl
comme une directive et d'utiliser la&
liaison pour enregistrer lainit
méthode.la source
Vous pouvez créer un objet enfant.
Ici, l'enfant prouve la destination de la méthode get.
la source