допустим, у вас есть директива <foo></foo>
(restrict: 'E'
). Вы хотите динамически добавлять атрибуты (~ изменить исходный DOM, а не шаблон), что должно быть сделано на шаге $compile
директивы. После добавления атрибутов, чтобы angularjs понял, есть ли какая-либо новая директива, которую можно запустить, вы должны скомпилировать новый элемент. например, это то, что делает ng-include. он включает элементы в DOM и компилирует их, чтобы можно было использовать новые директивы.
директива foo
:
compile: function ($tElement, $tAttrs) {
var el = $tElement[0];
el.setAttribute('bar', 'newFancyValue');
return function (scope, element, attrs) {
// you can even append html elements here, for example the template
element.append("<book></book>");
$compile(element)(scope);
};
}
а директива bar
(с restrict: 'A'
) может иметь любой код, который вы хотите.
Это связанный с этим вопрос, который вы также можете прочитать Наследование компонентов пользовательского интерфейса)
посмотрите на функцию transclude в документах, чтобы узнать, как добавить предыдущие внутренние элементы foo
в book
person
Eduard Gamonal
schedule
24.05.2013