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 веб-страницы.