2014-04-22 11 views
7

ich Problem habe html Unicode von AngularJS Controller angezeigt werden. ich folgende JS-Code habenAngularJS HTML Unicode Anzeige

var mOverview = angular.module('mOverview', []); 

mOverview.controller('mOverviewController', function ($scope, $sce) { 
    $scope.mData = [ 
    { 
     'name': '↓'+'NASDAQ', // here the unicode is ↓ but the output is also ↓ which is supposed to be a down-arrow 
     'amount': '15,698.85', 
     'upDown': '+105.84' 
     } 
    ]; 
}); 

Hier ist mein HTML

<div ng-app="mOverview"> 
    <div ng-controller="mOverviewController"> 
    <table> 
     <tr> 
     <th></th> 
     <th></th> 
     <th></th> 
     </tr> 
     <tr ng-repeat="md in mData"> 
     <td>{{md.name}}</td> 
     <td>{{md.amount}}</td> 
     <td>{{md.upDown}}</td> 
     </tr> 
    </table> 
</div> 

I $ sanitize versucht() und trustAsHtml aber keinen Erfolg. Wie kann ich als "Pfeil" in meinem HTML anzeigen?

Antwort

11

Angular Schiffe mit Strict Contextual Escaping. Sie müssten also explizit sagen, dass Sie ein Zeichen als HTML darstellen möchten.

Hinweis, habe ich auch hinzugefügt ng-sanitize in den externen Ressourcen.

habe ich einen neuen Filter

mOverview.filter('unsafe', function($sce) { 
    return function(val) { 
     return $sce.trustAsHtml(val); 
    }; 
}); 

und benutzte es, im Hinblick auf wie folgt aus:

<td ng-bind-html="md.name | unsafe"></td> 

http://jsfiddle.net/9UdVY/

+0

Awesome Mann, arbeiten, vielen Dank. Ich akzeptiere deine Antwort. – jeewan

+1

Danke, ich habe mir die Haare gezogen! Beachten Sie zu denen, die folgen: es nur mit ng-bind-html zu funktionieren scheint, nicht {{}} Bindung – MaxRocket

14

Vermeiden Sie HTML-Markup aus Skript zu schreiben. Sobald die Daten Inhalt HTML-Sonderzeichen wie < und & Sie Bruch und möglicherweise Sicherheitsprobleme (XSS) haben.

Der Charakter von dem HTML-Auszeichnungs &darr; bezeichnet ist U + 2193 Abwärtspfeil. Sie können direkt in JavaScript darauf verweisen einem JS Stringliteral Flucht mit:

'name': '\u2193NASDAQ', 

Oder wenn Ihre Seite/script konsequent gespeichert wird und wurde in einem Unicode-safe-Format (zB UTF-8), dann tun Sie nicht muss es überhaupt entkommen:

'name': '↓NASDAQ', 
+1

Diese Antwort sollte auf jeden Fall mehr upvotes erhalten, da es viel leichter in Bezug auf die Laufzeit-Overhead und Code für die Implementierung erforderlich ist (obwohl Unicode-Zeichen sind auf den ersten Blick vielleicht nicht so verständlich ...). – Bastian