2014-12-15 14 views
8

So etwas wie dies ich tue:Inline-Tags in AngularJS

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

Aber wie jeder weiß, die Dinge nicht immer so glatt gehen. Als ich ein "Tag" in den Inline-Code einfügte, schien AngularJS das Ganze komplett zu ignorieren und den Quellcode zu rendern.

Ich versuchte

"\<b>..... 

und

"&lt;b>... 

aber beide funktionierten nicht. Irgendeine Idee?

+1

Warum nicht ngClass verwenden? Oder ngBindHtml? –

+0

@FlorianF. - Da ich direkt eine Berechnung vor Ort mache (und zwar innerhalb von zwei ng Wiederholungen), kann ich ng bind html nicht verwenden. –

+0

Ja, Sie können nur eine Funktion anstelle einer Inline aufrufen, wenn? Es ist wahrscheinlich nicht der beste Ansatz, und ich würde wahrscheinlich mit ngClass oder einer Direktive gehen. –

Antwort

5

Wie in den Kommentaren geschrieben, Sie haben ein paar Optionen, von schlechter besser imho:

Zuerst ist 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>'); 
} 

Zweite ngClass zu verwenden ist zu verwenden, was auch nicht schlecht ist

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

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

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

und drittens und besser machen, eine Richtlinie

<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

Und Ihren Kommentar zu beantworten, ich glaube nicht, es gibt ein Weg-Tag mit Schnurrbart erstellen Syntax es ist einfach nicht so, wie es konzipiert wurde, expressions (das Ding zwischen geschweiften Klammern) ist grundsätzlich Anrufe an Controller und controllers shouldn't be used to manipulate DOM.

+0

Ich stimme zu, Controller sollten nicht DOM manipulieren, aber was ist mit ABC und seine gesamte Geschichte wird gelöscht werden? Es sollte einen Weg geben, semantisch über Rich Text zu sprechen. Lol, vielleicht ein Markdown-Filter. – jnm2