Parce que mon ng-bind-html utilise ng-click, je dois utiliser compile, mais les documents que j'ai lus écrivent tous dans la directive. Le problème est que j'utilise compile dans le filtre. Comment l'utiliser en ligne ? Aucune ressource ne peut être trouvée du tout.
app.filter('httpClickFilter',function($sce){
return function(inputText){
var textHttpArray = inputText.split('http');
textHttpArray[textHttpArray.length-1] = textHttpArray[textHttpArray.length-1] + ' ';
for(var i = 1;i < textHttpArray.length; i++){
var textSubstring = 'http' + textHttpArray[i].substring(0,textHttpArray[i].indexOf(' '));
var replaceTextHttp = "<span style='color:#fe7979' ng-click='httpLinkClick()'>"+textSubstring+"</span>";
inputText = inputText.replace(textSubstring,replaceTextHttp);
}
return $sce.trustAsHtml(inputText);
}
})
HTML : <span ng-bind-html="item.text | httpClickFilter"></span>
La signification générale est la suivante : interceptez un champ de texte, recherchez le lien http à l'intérieur et modifiez le lien HTTP pour qu'il soit cliquable. Vous pouvez utiliser des filtres ici !
http://stackoverflow.com/questions/19726179/how-to-make-ng-bind-html-compile-angularjs-codeSupplément
Si vous effectuez simplement une conversion de données, utiliser le filtre ici est sans aucun doute le bon choix. Mais vous êtes impliqué dans une liaison d'événement dynamique comme
ng-click
Pour le moment, il n'est pas approprié d'utiliser un filtre pour gérer cette exigence. Le filtre effectue un traitement supplémentaire sur notre entrée, ciblant les données. Notez qu'il cible les données. Si vous utilisez le filtre pour traiter la logique de rendu, cela viole le principe de responsabilité unique. de la conception angulaire du filtre.OK, si vous insistez pour l'écrire dans le filtre, alors la méthode
httpLinkClick
ne peut être accrochée que sur $rootScope, il n'y a pas d'autre choix, HACK une implémentationMais malheureusement, cela ne sert à rien, car trustAsHtml gère tous les événements liés.
Évidemment, ce besoin doit être implémenté à l'aide d'instructions. Vous devez comprendre que chaque fonction a son propre scénario d'utilisation.
Digression
Si le texte provient d'une saisie utilisateur, vous devez faire attention aux attaques XSS. Essayez d'utiliser le texte suivant
.http://stackoverflow.com/a/18149450/2586541