Предоставление директив в $ sce.trustAsHtml

Я включил Plunker здесь: http://plnkr.co/edit/4vqV8toHo0vNjtfICtzI?p=preview

Я пытаюсь добавить кнопку в DOM, и при нажатии на нее должна выполняться связанная с ней функция. В этом случае он должен предупредить «тестирование». Вот код.

controller

app.controller('MainCtrl', function($scope, $sce) { $scope.trustedHtml = $sce.trustAsHtml(''); $scope.testAlert = function () { alert('testing') }; }); 

HTML

  

$sce.trustAsHtml и ng-bind-html не предназначены для создания HTML с директивами. Этот метод не будет работать.

Это потому, что угловые работы сначала компилируются, а затем связываются. См. Концептуальный обзор для хорошего объяснения.

Короче говоря, к тому моменту, когда вы связываете HTML, определенный в вашем trustAsHtml , слишком поздно для углового компиляции (и, следовательно, понимания) директивы ng-click .

Чтобы динамически добавлять HTML, вы должны смотреть на службу $compile (и / или директивы). Документы здесь .

Извините за мой плохой английский.

Для Angular 1.6.1 я нашел решение, которое сработало для меня.

шаблон:

 

В controllerе:

  $scope.trustAsHtml = function(string) { return $sce.trustAsHtml(string); }; 

Директива:

 .directive('initBind', function($compile) { return { restrict: 'A', link : function (scope, element, attr) { attr.$observe('ngBindHtml',function(){ if(attr.ngBindHtml){ $compile(element[0].children)(scope); } }) } }; }) 
  • Директива изолирует область с областью ng-repeat в AngularJS
  • Ошибка Urularjs Uncaught: при переходе на V1.3
  • Вызовите метод controllerа с другого controllerа, используя 'scope' в AngularJS
  • Связывание одного controllerа с другим для вызова службы по ng-click
  • 'this' vs $ scope в controllerах AngularJS
  • При написании директивы в AngularJS, как я могу решить, нужна ли мне новая область, новая область для детей или новая изолированная область?
  • Давайте будем гением компьютера.