2013-07-09 14 views
5

Se provo a filtrare lo snippet con linky, l'input non è più disinfettato/reso/'html -ized'. vale a dire che voglio essere in grado di combinare gli effetti di entrambi:AngularJS: è possibile disinfettare e collegare nella stessa direttiva?

<div ng-bind-html="snippet"></div> 

e

<div ng-bind-html="snippet | linky"></div> 

Ecco il violino: http://jsfiddle.net/5uSnj/

+0

ho giocato con questo per gli ultimi 30 minuti e sembra che il filtro linky non disinfetti i tag HTML correttamente. Molte persone si sono lamentate al talkbalk sul sito di documentazione angolare. Provato usando $ sanitizza servizio, $ filtro e combinazione - riferimento allo script JS angular-sanitise.js ... Pensa che sei sfortunato con l'utilizzo del filtro. Forse fai la tua direttiva? – Lander

+0

Sì, ha creato una nuova direttiva per disinfettare e collegare. Ecco la richiesta di pull, vedremo cosa dicono gli sviluppatori: https://github.com/angular/angular.js/pull/3285 – brooksbp

+0

Sarei molto interessato a utilizzare questo. Lo snippet di @ Igor è stato trasformato in uno script installabile nel bower? – meshy

risposta

0

dispiace Igor Minar ho votato si risponde ma voglio vedere inviare un vostro funzione senza altri servizi:

app.filter('htmlLinky', function($sanitize, linkyFilter) { 
    var ELEMENT_NODE = 1; 
    var TEXT_NODE = 3; 
    var linkifiedDOM = document.createElement('div'); 
    var inputDOM = document.createElement('div'); 

    var linkify = function linkify(startNode) { 
    var i, ii, currentNode; 

    for (i = 0, ii = startNode.childNodes.length; i < ii; i++) { 
     currentNode = startNode.childNodes[i]; 

     switch (currentNode.nodeType) { 
     case ELEMENT_NODE: 
      linkify(currentNode); 
      break; 
     case TEXT_NODE: 
      linkifiedDOM.innerHTML = linkyFilter(currentNode.textContent); 
      i += linkifiedDOM.childNodes.length - 1 
      while(linkifiedDOM.childNodes.length) { 
      startNode.insertBefore(linkifiedDOM.childNodes[0], currentNode); 
      } 
      startNode.removeChild(currentNode); 
     } 
    } 

    return startNode; 
    }; 

    return function(input) { 
    inputDOM.innerHTML = input; 
    return linkify(inputDOM).innerHTML; 
    }; 
}); 

ng-bind-html = "html | htmlLinky"

Problemi correlati