状況:
コンテンツがjson形式でデータを返すAPIを呼び出して取得されるWebページを構築しています。
問題は、htmlタグがHTMLエンティティとして指定されているため、デコードする必要があることです。
例:
これは私が扱っているjsonの例です:
<p align="justify"><strong>15<sup>th</sup> HERE THERE IS A BOLD TEXT </strong> HERE SOME NORMAL TEXT...
ATTEMPT:
私はそれを研究することに時間を費やしていて、思ったより難しいようです。グーグルと同様にSO=質問を見て、可能な解決策はng-bing-htmlを使用することです
API呼び出し:
$http.get('http://API/page_content').then(function(resp)
{
$scope.content_test = resp.data[0].content;
}
フィルタ:
.filter('trusted', ['$sce', function($sce){
return function(text) {
return $sce.trustAsHtml(text);
};
}])
angularビューのNg-bind-html:
<div ng-bind-html=" content_test | trusted"></div>
出力:
これはビューの出力です(実際に表示されているとおり)。
<p align="justify"><strong>15<sup>th<\/sup> HERE THERE IS A BOLD TEXT<\/strong> HERE SOME NORMAL TEXT...
しかし、私が見る必要があるのは適切にフォーマットされたテキストです:
ここにありますIS A BOLD TEXTここにいくつかの通常のテキスト...
質問:
AngularJsでHTMLエンティティを適切にフォーマットされたHTMLにデコードするにはどうすればよいですか?
$sce
に渡す前に、もう1つの「デコード」ステップを実行する必要があると思います。たとえば、次のようになります。
app.filter('trusted', ['$sce', function($sce) {
var div = document.createElement('div');
return function(text) {
div.innerHTML = text;
return $sce.trustAsHtml(div.textContent);
};
}]);
angular.sanitize.js
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.1/angular-sanitize.js"></script>
依存関係を追加し、
var app = angular.module('plunker', ['ngSanitize']);
NOW HTML文字列をデコードして、それをng-bind-htmlに渡します。
$http.get('http://API/page_content').then(function(resp)
{
var html = resp.data[0].content;
var txt = document.createElement("textarea");
txt.innerHTML = html;
$scope.content_test = txt.value;
//if you use jquery then use below
//$scope.content_test = $('<textarea />').html(html).text();
}
<div ng-bind-html="content_test"></div>
filter
は回避できると思います。以下の例を参照してください。