У меня возникла идея обернуть входные данные в пользовательские директивы, чтобы гарантировать единообразный внешний вид и поведение на моем сайте. Я также хочу обернуть средство выбора даты и раскрывающийся список bootstrap ui. Кроме того, директива должна обрабатывать валидацию и отображать всплывающие подсказки.
HTML-код должен выглядеть примерно так:
<my-input required max-length='5' model='text' placeholder='text' name='text'/>
or
<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», как в примере выше). Проблема здесь в том, что нет простого способа получить доступ к включенному элементу, поскольку я хочу добавить настраиваемые атрибуты в случае средства выбора даты. Я мог бы использовать функцию преобразования, а затем перекомпилировать шаблон в функции ссылки, но это кажется немного сложным для этой задачи. Это также приводит к проблемам с включенной областью действия и состоянием переключения для средства выбора даты (один находится в области директив, другой — во включенной области).
используя только замену. В этом случае все атрибуты применяются к самому внешнему div (даже если я генерирую структуру шаблона dom в функции компиляции). Если я использую только ввод в качестве шаблона, то атрибуты будут на входе, но мне нужно сгенерировать шаблон в функции ссылки, а затем перекомпилировать его. Насколько я понимаю фазовую модель angular, хотелось бы избежать перекомпиляции и изменения шаблона dom в функции ссылки (хотя я видел, как многие так делают).
В настоящее время я работаю со вторым подходом и генерирую шаблон в функции ссылки, но мне было интересно, есть ли у кого-нибудь идеи получше!
<input type="text" data-datepicker-popup="" data-is-open="opened" data-current-text="{{current}}" data-close-text="{{text}}" data-clear-text="{{clear}}" data-show-weeks="{{showweeks}}" data-starting-day="{{startingday}}" placeholder="{{placeholder}}" data-ng-model="start" name="start" required="required" class="ng-isolate-scope ng-pristine ng-valid ng-valid-required">
- person roemer   schedule 19.12.2013