Я хочу отобразить список виджетов на странице из моего контроллера. Каждый виджет имеет свою собственную функцию рендеринга, которая возвращает безопасную HTML строку.
Моя первая часть моего ng-repeat
(внешний слой) выглядит так:
$scope.renderWidgets = function() {
var html = "";
html += "<div ng-repeat='widget in widgets'>";
html += "<div ng-bind-html='widget.render()'></div>"
html += "</div>";
return $sce.trustAsHtml(html);
}
Как вы можете видите, у меня есть ng-bind-html
внутри моего ng-repeat
, который вызывает функцию с именем. render()
, расположенную внутри widget
:
this.render = function() {
var html = "";
html += "<div ng-repeat='choice in widget.choices'>";
html += "{{choice.name}}";
html += "</div>";
return $sce.trustAsHtml(html);
}
У меня также есть директива, которую я использую для $compile
выше HTML строка в AngularJS.
Если я запускаю приведенный выше код, функция widget.render()
вызывается просто отлично, но вывод на странице будет выглядеть так: {{choice.name}}
, а не значение внутри choice.name
.
Как видите, я пытаюсь сделать еще один ng-repeat
внутри ng-bind-html
с помощью объекта widget
из моего первого ng-repeat
.
Это даже возможно, что я пытаюсь сделать здесь (я новичок в AngularJS)? Если да, то что я делаю не так? Или есть другой способ решить мою проблему?
Я использую последнюю версию AngularJS (v. 1.7.9).
ОБНОВЛЕНИЕ
Мне кажется, я знаю проблему. Когда я вызываю мою первую функцию $scope.renderWidgets()
, возвращаемая HTML будет автоматически компилироваться (первая ng-repeat
), и в этот момент запускается ng-bind-html
, возвращая не скомпилированную строку HTML. Теперь я должен выяснить путь к $compile
возвращенному HTML из моей директивы ng-bind-html
.
Я на правильном пути?