Comment puis-je évaluer les valeurs d'attribut dans une directive?
Est-il un bon moyen de directives AngularJS évaluer un attribut transmis en tant que paramètre?
Voici un exemple simplifié pour montrer mon problème (je reconnais que vous pourriez mettre en œuvre ce problème sans une directive):
link: function postLink(scope, element, attrs) {
debugger; //scope.$parent already knows the value of teacher here
scope.sendEmail = function(){
alert(attrs.recipient);
//window.open("mailto:" + attrs.recipient);
}
}
Je voudrais la directive sur l'utilisation de la valeur de teacher.email
(à noter que le lien de la fonction a la valeur correcte pour scope.$parent.teacher
) au lieu de la chaîne teacher.email
.
il suffit de remplacer attrs.destinataire avec la portée.destinataire
OriginalL'auteur Daniel | 2013-03-19
Vous devez vous connecter pour publier un commentaire.
@Ajay déjà mentionné dans un commentaire, vous pouvez utiliser
scope.recipient
. Cela fonctionne parce que vous avez créé un isolat champ d'application de la directive:Cela crée une directive champ d'application de la propriété nommée
recipient
qui va dans les deux sens lié aux données d'un parent champ d'application de la propriété. Le parent qui à la propriété? Celle qui est définie par l'attribut:recipient="teacher.email"
– d'où le parent champ d'application de la propriététeacher.email
est lié à isoler le champ d'application de la propriétérecipient
.Si votre directive ne sera pas modifier la valeur de
recipient
, vous devriez probablement utiliser '@' au lieu de '='. '@' nous donne "un moyen de chaînes":Vous aurez besoin de modifier votre code HTML:
Dans le sendEmail() de la fonction, nous pouvons toujours utiliser
scope.recipient
, comme nous l'avons fait pour le '='.Si nous utilisons
scope: true
au lieu de cela, la directive permettra de créer un enfant "normal" de la portée, plutôt que de l'isoler de la portée. Dans la directive de nous, puis utiliserpour obtenir la valeur. Cela fonctionne en raison de la façon JavaScript prototypes héritage fonctionne. $eval va chercher propriété
teacher.email
et de ne pas le trouver sur la directive de l'enfant. Il suit ensuite la chaîne de prototype à la portée parent et trouve là.OriginalL'auteur Mark Rajcok