Эта статья будет описывать решение одной конкретной задачи, а также на примере показывать как работает $transclude.
Задача такая: сделать директиву, обертку для select-а. Предположим, что мы хотим одним тегом добавлять сразу и селект и label к нему (потом можно будет туда добавить ошибки заполнения, но мы для простоты не будем этого делать). В общем то, на первый взгляд выглядит все просто.
Сделаем директиву и назовем ее field. Использовать будем так:
<field title="Цвет" type="select" ng-model="selectedColor" options="color.id as color.name for color in colors"></field>