Manière la plus facile de passer un AngularJS champ d'application variable de la directive de contrôleur?
Quelle est la meilleure façon de passer un AngularJS champ d'application variable de la directive de contrôleur? Tous les exemples que j'ai vu semblent si complexes, n'est-ce pas là un moyen pour que je puisse accéder à un contrôleur à partir d'une directive, et d'en créer un de la portée des variables?
- voir stackoverflow.com/questions/17900201/... pour plus d'informations
Vous devez vous connecter pour publier un commentaire.
Édité sur 2014/8/25:
Ici était là où je bifurquais il.
Merci @anvarik.
Ici est la JSFiddle. J'ai oublié d'où je bifurquais cette. Mais c'est un bon exemple de vous montrer la différence entre = et @
Attendre jusqu'à ce angulaire a évalué la variable
J'ai eu beaucoup de bidouiller avec cela, et je ne pouvais pas le faire fonctionner, même avec la variable définie avec
"="
dans le champ d'application. Voici trois solutions en fonction de votre situation.Solution n ° 1
J'ai trouvé que la variable n'a pas été évaluée par angulaire encore quand il était passé à la directive. Cela signifie que vous pouvez y accéder et de l'utiliser dans le modèle, mais pas à l'intérieur du lien ou de l'application du contrôleur de fonction, sauf si nous attendre qu'il soit évalué.
Si votre variable est en train de changer, ou est récupérée à travers une demande, vous devez utiliser
$observer
ou$montre
:Et voici le code html (n'oubliez pas les parenthèses!):
Notez que vous ne devez pas définir la variable à
"="
dans le champ, si vous utilisez le$observer
fonction. Aussi, j'ai trouvé qu'il passe par des objets comme des chaînes de caractères, donc si vous êtes de passage des objets utilisation solution #2 ouscope.$watch(attrs.yourDirective, fn)
(ou #3 si votre variable est de ne pas changer).Solution n ° 2
Si votre variable est créée en, par exemple un autre contrôleur de, mais faut juste attendre jusqu'à ce angulaire a évalué avant de l'envoyer à l'application du contrôleur, nous pouvons utiliser
$timeout
attendre jusqu'à ce que le$apply
a exécuter. Nous avons également besoin d'utiliser$émettent
de l'envoyer à la portée parent contrôleur app (du fait de l'isolement de la portée de la directive):Et voici le code html (pas de parenthèses!):
Solution n ° 3
Si votre variable ne change pas et vous avez besoin de l'évaluer dans votre directive, vous pouvez utiliser le
$eval
fonction:Et voici le code html (n'oubliez pas les parenthèses!):
Aussi, jetez un oeil à cette réponse: https://stackoverflow.com/a/12372494/1008519
De référence pour FOUC (flash de non stylé contenu) question: http://deansofer.com/posts/view/14/AngularJs-Tips-and-Tricks-UPDATED
Pour les intéressés: voici un article sur l'angle du cycle de vie
ng-if="someObject.someVariable"
sur la directive (ou de l'élément avec la directive en tant qu'attribut) est suffisante - la directive sur les coups de pied après lasomeObject.someVariable
est défini.