Comme @Ajay l'a déjà mentionné dans un commentaire, vous pouvez utiliser scope.recipient
. Cela fonctionne parce que vous avez créé un champ d'application isolate dans votre directive :
scope: {
recipient: "="
},
Cela crée une propriété de portée de directive nommée recipient
qui est liée à une propriété de la portée parentale dans les deux sens. Quelle propriété parentale ? Celle définie par votre attribut : recipient="teacher.email"
- d'où la propriété du champ d'application parent teacher.email
est lié pour isoler la propriété du champ d'application recipient
.
Si votre directive ne modifie pas la valeur de recipient
vous devriez probablement utiliser '@' au lieu de '='. '@' nous donne des "chaînes à sens unique" :
scope: {
recipient: "@"
},
Vous devrez cependant modifier votre code HTML :
<sendemail recipient="{{teacher.email}}"></sendemail>
Dans la fonction sendEmail(), nous pouvons encore utiliser scope.recipient
comme nous l'avons fait pour '='.
Si nous utilisons scope: true
au lieu de cela, la directive créera un champ d'application enfant "normal", plutôt qu'un champ d'application isolé. Dans la directive, nous utiliserions alors
scope.$eval(attrs.recipient)
pour obtenir la valeur. Cela fonctionne grâce à la manière dont l'héritage prototypique JavaScript fonctionne. $eval recherchera la propriété teacher.email
et ne le trouve pas dans le champ d'application de la directive enfant. Il suit alors la chaîne de prototypes jusqu'au champ d'application parent et le trouve à cet endroit.