Tengo un elemento al que me gustaría vincularle html.
<div ng-bind-html="details" upper></div>
Eso funciona. Ahora, junto con él, también tengo una directiva que está vinculada al html enlazado:
$scope.details = 'Success! <a href="#/details/12" upper>details</a>'
Pero la directiva upper
con div y anchor no evalúa. ¿Cómo lo hago funcionar?
angularjs
angularjs-directive
Amitava
fuente
fuente
Respuestas:
También estaba enfrentando este problema y, después de horas buscando en Internet, leí el comentario de @ Chandermani, que resultó ser la solución. Necesita llamar a una directiva de 'compilación' con este patrón:
HTML:
JS:
Puedes ver un violín de trabajo aquí.
fuente
function(scope, element, attrs)
, ¿de dónde sacaste esos tres argumentos, alcance , elemento y atributos ?link
propiedad. Se pasarán automáticamente cada vez quelink
el framework Angular los llame. Siempre estarán disponibles.$sce.trustAsHtml
desde otra función para crear el HTML que se "compilará" con esta directiva, debe eliminarlo. Gracias a @apoplexyGracias por la gran respuesta vkammerer. Una optimización que recomendaría es dejar de mirar después de que la compilación se ejecute una vez. El $ eval dentro de la expresión de observación podría tener implicaciones en el rendimiento.
Aquí hay un violín bifurcado y actualizado.
fuente
.directive()
código en el código publicado en la respuesta no.$eval
, puede usarloattrs.compile
directamente en lugar de la función anónima observada. Si solo proporciona una expresión de cadena, angular la llamará$eval
de todos modos.Agregue esta directiva angular-bind-html-compile
Úselo así:
Realmente fácil :)
fuente
Lamentablemente no tengo suficiente reputación para comentar.
No pude hacer que esto funcionara durante años. Modifiqué mi
ng-bind-html
código para usar esta directiva personalizada, pero no pude eliminar la$scope.html = $sce.trustAsHtml($scope.html)
que se requería para que ng-bind-html funcionara. Tan pronto como eliminé esto, la función de compilación comenzó a funcionar.fuente
Para cualquiera que se ocupe de contenido que ya se ha revisado,
$sce.trustAsHtml
aquí es lo que tuve que hacer de manera diferenteEsta es solo la
link
parte de la directiva, ya que estoy usando un diseño diferente. Deberá inyectar el$sce
servicio también$compile
.fuente
¡La mejor solución que he encontrado! Lo copié y funciona exactamente como lo necesitaba. Gracias Gracias gracias ...
en la función de enlace de directiva tengo
y en plantilla de directiva:
fuente