Ответ 1
Как уже упоминалось в комментарии @Ajay, вы можете использовать scope.recipient
. Это работает, потому что вы создали область выделения в своей директиве:
scope: {
recipient: "="
},
Это создает свойство области директивы с именем recipient
, которое представляет собой двустороннюю привязку данных к свойству родительской области. Какое родительское свойство? Тот, который определяется вашим атрибутом: recipient="teacher.email"
– поэтому свойство parent scope teacher.email
обязано изолировать свойство scope recipient
.
Если ваша директива не будет изменять значение recipient
, вы, вероятно, должны использовать '@' вместо '='. '@' дает нам "односторонние строки":
scope: {
recipient: "@"
},
Вам нужно будет изменить свой HTML:
<sendemail recipient="{{teacher.email}}"></sendemail>
В функции sendEmail() мы все равно можем использовать scope.recipient
, как и для '='.
Если вместо этого использовать scope: true
, директива создаст "нормальную" дочернюю область, а не область выделения. В директиве мы тогда использовали бы
scope.$eval(attrs.recipient)
чтобы получить значение. Это работает из-за того, как работает прототипное наследование JavaScript. $eval будет искать свойство teacher.email
и не будет находить его в управляющей области. Затем он следует цепочке прототипов в родительскую область и находит ее там.