Angulaire: ng-bind-html filtre ng-click?
J'ai quelques données html que je suis le chargement à partir d'un fichier json.
Je suis l'affichage de ce code html de données en utilisant ngSanitize dans mon application et l'utilisation de ng-bind-html.
Maintenant, je voudrais convertir tous les liens dans le json blob de la norme
<a href="some_link">link</a>
à:
<a ng-click="GotoLink('some_link','_system')">link</a>
.
Donc je fais une regExp sur le fichier json pour convertir les liens, mais pour certaines raisons, cependant ng-bind-le html est le filtrage de la ng-cliquez sur dans elle est sortie, et je ne peux pas comprendre pourquoi. Est-il censé faire cela, et si oui, est-il possible de désactiver ce comportement?
Découvrez ce jsFiddle pour une démonstration:
http://jsfiddle.net/7k8xJ/1/
Des idées?
- Ne ng-bind-html-faire un travail dangereux?
- Nan.. Alors il n'y a pas de sortie à tous.
- double possible de angulaire ng-bind-html-dangereux et la directive en son sein
Vous devez vous connecter pour publier un commentaire.
Ok, donc le problème est qu'il n'est pas de compiler le code html de l'inclure (angulaire n'est pas l'analyser pour trouver les directives et autres joyeusetés). Ne peux pas penser à une façon de faire pour compiler à partir de l'intérieur de la manette, mais vous pouvez créer une directive qui inclut le contenu, et le compile.
De sorte que vous changeriez
à
Et puis pour le js:
Angulaire 1.2.12: http://jsfiddle.net/7k8xJ/4/
Angulaire 1.4.3: http://jsfiddle.net/5g6z58yy/ (même code que précédemment, mais certains disaient que ça ne fonctionne pas sur 1.4.*)
Explicitement Confiance HTML Avec
$sce
Lorsque vous voulez Angulaire de rendre le modèle de données au format HTML sans poser de questions, le
$sce
service, c'est ce dont vous aurez besoin.$sce
est la Stricte Contextuelle s'Échapper de service – un nom de fantaisie pour un service qui peut s'enrouler une chaîne HTML avec un objet qui raconte le reste de l'Angulaire de l'HTML est approuvé pour rendre n'importe où.Dans la version suivante du contrôleur, le code demande pour le
$sce
service et utilise le service pour transformer la matrice de liens dans un tableau de confiance des objets HTML à l'aide de$sce.trustAsHtml.
J'ai encore rencontré de problème avec la compilation, qui ne répondait pas à mes besoins. Donc, il y a ceci, un vraiment agréable et facile hack pour contourner ce problème.
Nous remplacer le ng-click avec onClick comme onClick œuvres. Ensuite, nous allons écrire une fonction javascript et l'appeler sur l'événement onClick.
Dans le onClick de la fonction, nous trouvons la portée de la balise d'ancrage et appeler cette fonction requise explicitement.
Ci-dessous comment c'est fait 🙂
Plus tôt,
Maintenant,
en bas ou ailleurs,
Cela devrait fonctionner maintenant. Espérons que l'aide à quelqu'un 🙂
Pour plus d'info, voir ici.