JavaScript AngularJS Raw HTML

ClocxHD

Lt. Junior Grade
Registriert
Aug. 2014
Beiträge
376
Hallo,

ich versuche, mit AngularJS "News" aus einer Datenbank auszugeben.
Das funktioniert auch soweit.
Jedoch möchte ich den Text als HTML ausgeben, da für die Eingabe TinyMCE verwendet wird.
(Zum Thema Sicherheit sollte das nicht so das Problem sein, da 1. News nur von Administratoren hinzugefügt werden können, und zweitens schon von Framework gegen XSS etc. "geschützt" wird.)

Mein JavaScript:
Code:
var thamian = angular.module('thamianNews', []);

thamian.controller('NewsController', function ($scope, $http, $sce) {
    $http.get("https://www.thamian.de/news/json").success(function (response) {
        $scope.news = response;
        $scope.newsText = $sce.trustAsHtml(response.Title);
    });

    $scope.getData = function () {
        $http.get("https://www.thamian.de/news/json").success(function (response) {
            $scope.news = response;
        });
    };

    setInterval($scope.getData, 20000);
});

Mein HTML/Twig Code:
HTML:
<div class="news" style="overflow-y: auto" ng-modules="thamianNews" ng-controller="NewsController">
    <div class="bknews" ng-repeat="eintrag in news">
        <div class="panel panel-default">
            <div class="panel-heading">
                <h4 class="panel-title"><b>Titel:</b> {% verbatim %}{{ eintrag.Title }}{% endverbatim %} | <b>Art:</b> Intern</h4>
            </div>
            <div class="panel-body">
                {% verbatim %}{{ eintrag.Text }}{% endverbatim %}
            </div>
            <div class="panel-footer">
                Hinzugefügt von <b>{% verbatim %}{{ eintrag.Added_By }}{% endverbatim %}</b> am <b>{% verbatim %}{{ eintrag.Date }}{% endverbatim %}</b>
            </div>
        </div>
    </div>
</div>

Durch Googlen habe ich erfahren, dass man dafür "ng-bind-html" verwenden kann, jedoch habe ich ja nicht nur einen Eintrag, sondern mehrere, und verwende deshalb "ng-repeat".
Wie kann ich das dort machen?

Info:
Als Framework wird Silex, und als Templating-Engine Twig verwendet.

Vielen Dank schon mal im voraus! :)

Edit:
Hier der JSON-Code, der ausgewertet wird:
Code:
[
{
ID: "2",
Added_By: "fthielen",
Title: "Noch einer. D:",
Text: "<p>Noch ein Post von der Seite. D:</p>",
Date: "26.08.2016, 13:17:15"
},
{
ID: "1",
Added_By: "fthielen",
Title: "Test",
Text: "<p>Oha. D:</p>",
Date: "26.08.2016, 13:09:15"
}
]

LG,
ClocxHD
 
Zuletzt bearbeitet: (JSON hinzugefügt)
Du brauchst dafür dieses AngularJs Packet: https://docs.angularjs.org/api/ng/service/$sce

Damit kannst du einfach deinem String übergeben:

Code:
$scope.meineHtmlDaten = $sce.trustAsHtml($scope.meinHtmlString);

Und hinterher im HTML so einbinden:

Code:
<div ng-bind-html="meineHtmlDaten"></div>

Es gibt verschiedene Stufen, wie das HTML angezeigt wird. Das steht aber alles in dem Link oben.
 
Zurück
Oben