Обработка выражений в директивах AngularJS

AngularJS предоставляет ряд сервисов, которые работают с выражениями AngularJS, в том числе и выражениями привязки. Разберем один из них - сервис $compile. Он преобразует HTML-код, содержащий выражения привязки и директивы, в функцию, вызываемую для генерации контента.

Чтобы применить сервис $compile, возьмем директиву answerList из прошлой темы и изменим ее следующим образом:

questApp.directive("answerList", function($compile) {
    return function (scope, element, attrs) {
        var content = "<div class='answers'>" +
        "<div ng-repeat='answer in question.answers' class='answer'>" +
            "<div class='vote'>" +
            "<a class='vote-up' ng-click='voteUp(answer)'></a>" +
            "<span class='rate'>{{answer.rate}}</span>" +
            "<a class='vote-down' ng-click='voteDown(answer)'></a>" +
            "</div>" +
        "<b>{{answer.text | formatText}}</b>" +
        "<p>{{answer.author}}</p>" +
        "<p><i>{{answer.date}}</i></p>" +
    "</div></div>";
        var answersElem = angular.element(content);
        var compileFn = $compile(answersElem);
        compileFn(scope);
        element.append(answersElem);
    }
});

Сервис $compile представляет функцию, генерирующую контент из фрагментов html. Чтобы наполнить контент данными из контроллера, в функцию передается параметр scope: compileFn(scope);

Завершает работу метод element.append(answersElem), который добавляет сгенерированный контент в структру DOM веб-страницы.