templateurl parameter directives directivas custom compile angularjs angularjs-directive angularjs-scope

parameter - scope directive angularjs



Directivas de representación dentro de $ sce.trustAsHtml (2)

Perdón por mi mal ingles.

Para Angular 1.6.1 encontré una solución que funcionó para mí.

modelo:

<div ng-bind-html="trustAsHtml(content);" init-bind> </div>

En el controlador:

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

Directiva:

.directive(''initBind'', function($compile) { return { restrict: ''A'', link : function (scope, element, attr) { attr.$observe(''ngBindHtml'',function(){ if(attr.ngBindHtml){ $compile(element[0].children)(scope); } }) } }; })

He incluido un Plunker aquí: http://plnkr.co/edit/4vqV8toHo0vNjtfICtzI?p=preview

Intento agregar un botón al DOM y al hacer clic debería ejecutar la función vinculada a él. En este caso, debería alertar a "prueba". Aquí está el código.

controlador

app.controller(''MainCtrl'', function($scope, $sce) { $scope.trustedHtml = $sce.trustAsHtml(''<button ng-click="testAlert()">Submit</button>''); $scope.testAlert = function () { alert(''testing'') }; });

HTML

<body ng-controller="MainCtrl"> <div ng-bind-html="trustedHtml"></div> </body>


$sce.trustAsHtml y ng-bind-html no están destinados a construir HTML con directivas. Esta técnica no funcionará

Esto se debe a que angular funciona compilando primero y luego vinculando. Vea la descripción conceptual para una buena explicación.

En resumen, cuando se vincula el HTML definido en su trustAsHtml , es demasiado tarde para que angular compile (y por lo tanto entienda) la directiva ng-click .

Para agregar HTML de forma dinámica, debe consultar el servicio $compile (y / o las directivas). Los doctores están aquí .