2013-02-20 9 views
9

Utworzono 2 filtry w AngularJS autolink i nl2br.Stosowanie filtrów na wyjściowym kodzie HTML dla AngularJS

autolink: konwertuje ciąg URL do <a> tagu z atrybutami rel="nofollow" target="_blank". Próbowałem użyć ngSanitize z filtrem linkowym, ale nie dodaje on do niego 2 atrybutów ani nie daje sposobu na to, aby zrobić to za pomocą interfejsu API.

nl2br: konwertuje nowe linie do tagów <br>.

Chcę zastosować te 2 filtry do {{ comment }} wykorzystaniem {{ comment | autolink | nl2br }} w moim HTML, ale filtry są stosowane przed angularjs robi Cytowanie HTML, który skutkuje <a> i <br> być uciekł jak dobrze. Zasadniczo chcę zastosować filtry po miało miejsce ucieczkę.

Czy można to zrobić z AngularJS?

Odpowiedz

13

Jeśli masz standardową interpolacji w kodzie HTML, kątowa będzie uciec:

<div> {{ var | filter1 | filter2 }} </div> 

Wynikiem całego wyrażenia zostanie uciekł.

To czego chcesz to ng-bind-html-unsafe(docs here). Można wyraz w zasadzie to samo, co powyżej, jak:

<div ng-bind-html-unsafe='var | filter1 | filter2'></div> 

Teraz wynikiem wyrażenia nie zostaną oczyszczone i zostanie wstawiony jako zawartości div.

EDIT: Należy pamiętać, że istnieje również ng-bind-html, który nadal będzie produkować HTML, ale będzie go najpierw zdezynfekować ($sanitize docs).

ng-bind-html mieszka w module ngSanitize, więc musisz się upewnić, że zadeklarowałeś to jako zależność w rozmowie angular.module.

+1

Ale chcę, aby komentarz, w moim przypadku, został usunięty; z 2 filtrami zastosowanymi po ucieczce. – ademers

+0

Ah, następnie użyj 'ng-bind-html' zamiast' ng-bing-html-dangerous'. Dodałem to do odpowiedzi. – satchmorun

+1

Zrobiłem to tak, jak podano w moim oryginalnym wpisie. Ale chcę, żeby wszystko uciekło THEN zastosuj moje filtry. 'ng-bind-html' bezpiecznie wymyka się niektórym HTML i pozostawia tylko podstawowe tagi html. Również z 'ng-bind-html', usunie atrybut' href', który definiuję za pomocą filtru 'autolink'. – ademers

Powiązane problemy