2014-12-15 13 views
8

Więc robię coś takiego:tagi wbudowane w angularjs

{{someFlag ? "<b>Bold Text</b>" : "<i>Italic Text</i>"}} 

Ale jak każdy wie, rzeczy nie zawsze idzie tak gładko. Kiedy umieściłem "znacznik" w wbudowanym kodzie, AngularJS wydaje się całkowicie ignorować całość i renderować kod źródłowy.

Próbowałem

"\<b>..... 

i

"&lt;b>... 

ale oboje nie działa. Dowolny pomysł?

+1

Dlaczego nie używać ngClass? Lub ngBindHtml? –

+0

@FlorianF. - Ponieważ bezpośrednio wykonuję jakieś obliczenia na miejscu (i jest to wewnątrz dwóch powtórzeń), nie mogę użyć ng bind html. –

+0

Tak, możesz zadzwonić do funkcji zamiast wstawić, jeśli? Prawdopodobnie nie jest to najlepsze podejście i prawdopodobnie pójdę z ngClass lub dyrektywą. –

Odpowiedz

5

Jak pisał w komentarzach, masz kilka opcji, od gorszego do lepszego IMHO:

Pierwszy jest użycie ngBindHtml

<div ng-bind-html="italicOrBold('With ngBindHtml', someFlag)"></div> 

$scope.italicOrBold = function(text, bold){ 
    return $sce.trustAsHtml(bold ? '<b>Test</b>' : '<i>Test</i>'); 
} 

drugie jest użycie ngClass, która nie jest tak źle projekt

<div ng-class="{'text-bold' : someFlag, 'text-italic' : !someFlag}">With ngClass</div> 

.text-bold{ 
    font-weight:bold; 
} 

.text-italic{ 
    font-style:italic; 
} 

i po trzecie i lepiej zrobić dyrektywę

<div bold-me-up="someFlag">Or even better with a directive</div> 

.directive('boldMeUp', function(){ 
    return { 
     template: '<div ng-class="{\'text-bold\' : boldMeUp, \'text-italic\' : !boldMeUp}" ng-transclude></div>', 
     restrict: 'A', 
     replace: true, 
     transclude: true, 
     scope: { 
      boldMeUp: '=' 
     }, 
     link: function postLink(scope, element, attrs) { 
     } 
    }; 
}) 

Plunker demo

I odpowiedzieć na komentarz, nie sądzę, istnieje sposób, aby utworzyć tag z wąsami składnia to po prostu nie sposób, w jaki został zaprojektowany, expressions (rzeczą pomiędzy klamrami) są w zasadzie połączenia z kontrolerem i controllers shouldn't be used to manipulate DOM.

+0

Zgadzam się, kontrolerzy nie powinni manipulować DOM, ale co z "ABC i cała historia zostanie usunięta"? Powinno być jakiś semantyczny sposób mówienia o bogatym tekście. Lol, może filtr Markdown. – jnm2