У меня возникла идея поместить ввод в пользовательские директивы, чтобы гарантировать последовательный внешний вид и поведение на моем сайте. Я также хочу, чтобы упаковать бутстрап ui datepicker и выпадающий список. Кроме того, директива должна обрабатывать подсказки и отображать всплывающие подсказки.
HTML должен выглядеть примерно так:
<my-input required max-length='5' model='text' placeholder='text' name='text'/>
или
<my-datepicker required model='start' placeholder='start' name='start'/>
в директивах я хочу создать структуру dom, например:
<div>
<div>..</div> //display validation in here
<div>..</div> //add button to toggle datepicker (or other stuff) in here
<div>..</div> //add input field in here
</div>
Я пробовал различные способы достижения этого, но всегда сталкивался с некоторыми компромиссами:
-
используя transclude и replace, чтобы вставить вход в структуру dom директив (в этом случае директива будет ограничена "A", а не "E", как в примере выше). Проблема здесь в том, что нет простого способа доступа к элементу transcluded, поскольку я хочу добавить пользовательские атрибуты в случае datepicker. Я мог бы использовать функцию transclude, а затем перекомпилировать шаблон в функции ссылок, но это кажется немного сложным для этой задачи. Это также приводит к проблемам с транскодированной областью и состоянием переключения для datepicker (один из них находится в области директив, другой - в области трансляции).
-
используя только замену. В этом случае все атрибуты применяются к внешнему div (даже если я сгенерирую структуру шаблона dom в функции компиляции). Если я использую только вход в качестве шаблона, то атрибуты находятся на входе, но мне нужно сгенерировать шаблон в функции ссылок, а затем перекомпилировать его. Насколько я понимаю фазовую модель angular, я хотел бы избежать перекомпиляции и изменения шаблона dom в функции ссылки (хотя я видел, как многие это делали).
В настоящее время я работаю со вторым подходом и создаю шаблон в функции ссылок, но мне было интересно, есть ли у кого-то лучшие идеи!