J'ai deux contrôleurs, l'un enveloppé dans un autre. Maintenant, je sais que la portée enfant hérite des propriétés de la portée parent, mais existe-t-il un moyen de mettre à jour la variable de portée parent? Jusqu'à présent, je n'ai trouvé aucune solution évidente.
Dans ma situation, j'ai un contrôleur de calendrier dans un formulaire. Je voudrais mettre à jour les dates de début et de fin de la portée parent (qui est le formulaire) afin que le formulaire ait les dates de début et de fin lorsqu'il est soumis.
Réponses:
Vous devez utiliser un objet (pas une primitive) dans la portée parent et vous pourrez ensuite le mettre à jour directement à partir de la portée enfant
Parent:
Enfant:
Démo de travail : http://jsfiddle.net/sh0ber/xxNxj/
Voir Quelles sont les nuances de l'héritage prototypique / prototypique de portée dans AngularJS?
la source
Il existe une autre façon de faire cette tâche et de ne pas utiliser la
$scope.$parent
variable.Préparez simplement une méthode pour modifier la valeur dans la portée parent et utilisez-la dans l'enfant un. Comme ça:
Cela fonctionne également et vous donne plus de contrôle sur les changements de valeur.
Vous pouvez ensuite appeler aussi la méthode même en HTML comme:
<a ng-click="changeSimpleValue('y')" href="#">click me!</a>
.la source
Cela fonctionne également (mais je ne sais pas si cela suit les meilleures pratiques ou non)
la source
Lorsque vous affectez un attribut primitif à une portée, il est toujours local à la portée (éventuellement créé à la volée), même si une portée parente a un attribut du même nom. Ceci est une décision de conception, et une bonne IMHO.
Si vous avez besoin de modifier une primitive (entiers, booléens, chaînes) dans la portée parent, à partir de la vue, vous en avez besoin pour être un attribut d'un autre objet dans cette portée, donc l'affectation peut lire:
et il sera, à son tour:
viewData
objet à partir de la portée dans laquelle il est définimyAttr
attribut.la source
Pour accéder aux variables déclarées dans le parent, nous devrions utiliser $ parent dans le contrôleur enfant ou le fichier modèle
Dans le contrôleur
Dans un modèle html
la source