Ответ 1
Вся информация, которую вы ищете, доступна на веб-сайте документации AngularJS.
function compile(tElement, tAttrs, transclude) { ... }
function link(scope, iElement, iAttrs, controller) { ... }
function controller(scope, element, attribute, transcludeFn)
Посмотрите в разделе "Длинные версии директивы написания"