=====Compile в директивах AngularJS===== Зачем же нам нужен compile? Compile используется для одной единственной вещи. Чтобы манипулировать самой разметкой нашего елемента и шаблона.\\ \\ Давайте попробуем. Создадим директиву ui-source Эта директива будет у нас принимать внутрь себя кусок html, выводить его на страницу и оборачивать в prettify. Есть такая классная библиотека, называется google-prettify. Вот я ее подключил. Если вы ее подключите, то вам будут доступны функции, которые превращают кусок html в этот же html, но с классами prettify и если вы добавите к ним css, то у вас будет красивая подсвеченая разметка.\\ \\ Сейчас мы попробуем это сделать в виде директивы. Все что вам нужно для работы - это подключать Angular, PrettifyJS и css файл prettify. В css содержаться стили, которые будут применены к нашему html.\\ \\ Теперь давайте напишем html, который мы будем обрамлять.

Hello {{yourName}}

Теперь в нашей директиве напим функцию compile. На вход мы получаем елемент. Давайте его законсолим. Вот наша разметка вывелась. Вот наш DOM елемент, который нам доступен. {{ :angular:angularjs:custom_directive:directive40.png |}} Теперь давайте создадим елемент pre, в который мы завернем всю разметку. compile: function (elem) { console.log(elem); var pre = angular.element('
');
  var pretty = prettyPrintOne(elem.html());
  console.log(pretty);
}
Мы создали DOM елемент и вызвали функцию prettyPrintOne, которая принимает на вход первым параметром html. Давайте посмотрим. Мы видим кусок html и там добавились всякие span, div, которые мы не писали. Это классы prettyPrint, которые потом красиво форматируют наш html. {{ :angular:angularjs:custom_directive:directive41.png |}} Дальше мы хотим в елемент pre вставить pretty и заменить шас текущий елемент на новый. compile: function (elem) { console.log(elem); var pre = angular.element('
');
  var pretty = prettyPrintOne(elem.html());
  pre.append(pretty);
  elem.replaceWith(pre);
}
Итак еще раз - Мы создали новый DOM елемент pre - Мы вызвали функцию библиотеки prettyprint и передали туда наш html - Теперь мы аппендим наш html внутрь pre - И заменяем на наш новые елемент Как мы видим в браузере, у нас уже красиво выглядит html, какой-то css применился. {{ :angular:angularjs:custom_directive:directive42.png |}} Но мы хотим видить код, а не скомпилированный шаблон. Для этого давайте создадим функцию escape, которая заменит открывающие и закрывающие теги. compile: function (elem) { console.log(elem); var escape = function (content) { return content.replace(/\/g, '>'); } var pre = angular.element('
');
  var pretty = prettyPrintOne(escape(elem.html()));
  console.log(pretty);
  pre.append(pretty);
  elem.replaceWith(pre);
}
Мы вызвали функцию escape на наш html, чтобы теги не воспринимались браузером. Как мы видим, вся наша разметка уже выводится нормально, так как нам нужно, в виде кода. Если же мы посмотрим в консоль, то мы увидим, что все открывающие и закрывающие теги представляют собой специальные символы, которые воспринимаются браузером как текст, а не теги. {{ :angular:angularjs:custom_directive:directive43.png |}} Собственно, вот мы и написали с вами простейшую директиву с compile, которая любой кусок кода сделает красивым. ---- {{ :angular:angularjs:custom_directive:20-angular-compile-in-directives-master.zip |}}