J'ai un élément que je voudrais lier html.
<div ng-bind-html="details" upper></div>
Ça marche. Maintenant, avec cela, j'ai également une directive qui est liée au html lié:
$scope.details = 'Success! <a href="#/details/12" upper>details</a>'
Mais la directive upper
avec le div et l'ancre n'évalue pas. Comment le faire fonctionner?
angularjs
angularjs-directive
Amitava
la source
la source
Réponses:
J'étais également confronté à ce problème et après des heures de recherche sur Internet, j'ai lu le commentaire de @ Chandermani, qui s'est avéré être la solution. Vous devez appeler une directive 'compile' avec ce modèle:
HTML:
JS:
Vous pouvez voir un violon qui fonctionne ici
la source
function(scope, element, attrs)
, d'où avez-vous tiré ces trois arguments, portée , élément et attrs ?link
propriété. Ils seront transmis automatiquement à chaque fois qu'illink
sera appelé par le framework Angular. Ils seront toujours disponibles.$sce.trustAsHtml
partir d'une autre fonction pour créer le HTML qui sera "compilé" avec cette directive, vous devez le supprimer. Merci à @apoplexyMerci pour l'excellente réponse vkammerer. Une optimisation que je recommanderais est de ne plus regarder après la compilation une fois. Le $ eval dans l'expression watch pourrait avoir des implications sur les performances.
Voici un violon fourchu et mis à jour.
la source
.directive()
code du code affiché dans la réponse ne fonctionne pas.$eval
- vous pouvez simplement l'utiliserattrs.compile
directement à la place de la fonction anonyme surveillée. Si vous fournissez simplement une expression de chaîne, angular l'appellera$eval
quand même.Ajoutez cette directive angular-bind-html-compile
Utilisez-le comme ceci:
Vraiment facile :)
la source
Malheureusement, je n'ai pas assez de réputation pour commenter.
Je n'ai pas pu faire fonctionner cela pendant des lustres. J'ai modifié mon
ng-bind-html
code pour utiliser cette directive personnalisée, mais je n'ai pas réussi à supprimer le$scope.html = $sce.trustAsHtml($scope.html)
qui était requis pour que ng-bind-html fonctionne. Dès que j'ai supprimé cela, la fonction de compilation a commencé à fonctionner.la source
Pour toute personne traitant du contenu qui a déjà été parcouru,
$sce.trustAsHtml
voici ce que je devais faire différemmentCe n'est que la
link
partie de la directive car j'utilise une mise en page différente. Vous devrez injecter le$sce
service ainsi que$compile
.la source
La meilleure solution que j'ai trouvée! Je l'ai copié et ça marche exactement comme j'avais besoin. Merci, merci, merci ...
dans la fonction de liaison directive que j'ai
et dans le modèle de directive:
la source