「クリア」ボタン(ブラウザが<input type="search">
要素に追加する「x」ボタンを考えてください)を<input>
.
「クリア」ボタンはディレクティブから注入され、絶対的に配置されるため、「クリア」ボタンの適切な配置を保証する必要<input>
があるラッパー要素に、既存のボタンと新しく追加された「クリア」ボタンの両方を含めたいと思います。position: relative
宣言された 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's 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>
これは私が求めているものですが、理想的には 2 つの新しい要素をテンプレート化し、link
関数から DOM 操作を抽象化したいと考えています。
replace
/template
とオプションのいずれかまたは両方を使用してこれを行うには、おそらくより良い方法があるとtransclude
思いますが、これらのオプションのいずれかでソース要素を (すべての属性とデータバインディングと共に) 保持して使用する方法がわかりません。
また、私のサンプルng-model
では source 要素に が定義されていますが、これはオプションと見なす必要があることに注意してください。また、ディレクティブを属性 ( ) に制限したいと思いますrestrict: 'A'
。