Вопрос здесь не в удаленных и локальных шаблонах, а скорее в выражении в дочернем DOM и в шаблоне.
Детские элементы элемента, принимающего директиву, не входят в область, созданную этой директивой, - они и директива являются братьями и сестрами для целей охвата.
Таким образом, {{message}}
будет оцениваться по охвату родителя.
Чтобы «довести эти элементы в рамки» требует использования $compile
:
link: function(scope, element){
$compile(element.contents())(scope);
}
EDIT:
подход выше вызывает содержание компилировать дважды - один раз в процессе компиляции, а второй раз - с $compile
. Это, конечно, неоптимально.
Чтобы избежать этого, ручной подход был бы к $compile
и удалить содержимое элемента в compile
функции директивы, а затем связать скомпилированные содержимое и добавить/добавить их к элементу в функции link
.
Вместо этого Угловой обеспечивает затвор. Когда transclude: true
(или transclude: 'element'
), содержимое скомпилируется один раз, и клон переведенного содержимого, привязанный к области, заданной функцией transclude, доступен для размещения в любом месте.
transclude: 'element',
link: function(scope, element, attrs, ctrls, transcludeFn){
// bind to the directive's scope
transcludeFn(scope, function(clone){
// element here is the comment element left after transclusion
element.after(clone);
});
выражение внутри этой формы не является частью директивы, оно является частью дерева элементов, которое отображает эту форму. Если вы хотите, чтобы элемент был частью директивы, вам необходимо использовать переход. – Claies
Я ответил на вопрос, похожий несколько недель назад, http://stackoverflow.com/questions/28857942/ng-model-not-working-for-attribute-directive/28859667#28859667. Код не совсем то же самое, но концепция должна быть идентичной. – Claies
Yup, '' transclude: 'element''' - правильный путь. – jlowcs