Ответ 1
Это зависит от того, какое значение по умолчанию вы хотите назначить. Если вы хотите по умолчанию указать имя в родительской области, установка значения атрибута по умолчанию в директиве compile
будет работать:
compile: function(element, attrs) { if (attrs.person == undefined) { attrs.$set("person", "person"); } ...
Если вы хотите, чтобы директива предоставила значение по умолчанию, она немного запуталась, так как Angular не позволит вам назначить псевдоним в области выделения (вы получите исключение "непривязанное выражение модели" из который пытается распространить назначение на изолированную родительскую область). Однако вы можете предотвратить это, пометив атрибут как необязательный (что означает, что Angular не будет регистрировать слушателя, когда свойство оммитировано).
scope: { person: "=?" }, link: function(scope, element, attrs) { if (scope.person == undefined) { scope.person = "Bob"; } ... }