Я пишу Директиву (используя AngularJS 1.2.0-rc2, если это имеет значение), который добавляет кнопку "clear" (подумайте о кнопке "x", которую браузер добавляет для элементов <input type="search">
), в <input>
.
Поскольку кнопка "clear" вводится из Директивы и абсолютно позиционируется, я хотел бы содержать как существующую <input>
, так и недавно добавленную кнопку "clear" в элементе обертки, который имеет position: relative
, чтобы обеспечить правильное позиционирование кнопки "clear".
Объявленный HTML выглядит следующим образом:
<input type="text" id="myField" data-ng-model="someModel" data-search>
Директива, которую я имею до сих пор:
angular.module('myApp', []).directive('search', function() {
var
clear = angular.element('<a href role="button" class="btn x" style="display:none">×</a>'),
wrapper = angular.element('<div style="position: relative"></div>');
return {
restrict: 'A',
link: function( scope, element, attrs ) {
element.wrap(wrapper.append(clear));
// more code that not relevant to my question
}
};
});
В результате HTML я получаю
<div style="position: relative">
<a href role="button" class="btn x" style="display: none">×</a>
<input type="text" id="myField" data-ng-model="someModel" data-search>
</div>
это то, что мне нужно, но я хотел бы идеально сфокусировать два новых элемента и абстрагировать манипуляции DOM из моей функции link
.
Мне кажется, что есть лучший способ сделать это, используя либо или оба параметра replace
/template
и transclude
, но я не уверен, как сохранить и использовать исходный элемент (со всеми его атрибуты и привязки данных) с любой из этих опций.
Также обратите внимание, что хотя мой образец имеет ng-model
, определенный в исходном элементе, это следует считать необязательным. Я также хотел бы, чтобы директива ограничивалась атрибутами (restrict: 'A'
).