2017-03-15 6 views
0

フロントエンドには角度を使用し、バックエンドにはノードを使用しています。HTMLをmySQLからレンダリングしてページに表示する角度とJavaScript

<ul> 
    <li>item1</li> 
    <li>item2</li> 
    <li>item3</li> 
</ul> 

データはJSON形式、すなわち現在ある:

{ 
    "data": [ 
    { 
     "id": 1, 
     "sort_order": 0, 
     "content_type": "main_message", 
     "heading": "Welcome to our site ", 
     "content": "<ul> 
         <li>item1</li> 
         <li>item2</li> 
         <li>item3</li> 
        </ul>", 
     "page_name": "home", 
     "author_id": "abhatti", 
     "date_created": "2017-03-13T15:12:00.000Z", 
     "date_modified": "2017-03-13T15:12:00.000Z", 
     "modified_by": "abhatti" 
    }, 
    { 
     "id": 2, 
     "sort_order": 0, 
     "content_type": "main_body_content", 
     "heading": "Announcements", 
     "content": "", 
     "page_name": "home", 
     "author_id": "Robert", 
     "date_created": "2016-12-31T17:00:00.000Z", 
     "date_modified": "2017-03-11T07:08:00.000Z", 
     "modified_by": "Danny" 
    }, 

私は手動すなわち、その上にテキスト形式ではなくHTMLタグでそれを格納しているMySQLのDBからデータを取得しています私は、テーブル内のデータを入れたとき、私はテーブルがHTML形式のデータを表示したいが、それはこの

<ul> 
    <li>item1</li> 
    <li>item2</li> 
    <li>item3</li> 
</ul> 

のようなページに表示すべてのHTMLタグと生の形式で表示されますが、私のような何かをしたいですそれはHTMLとしてブラウザによって読み取られるように、この

  • ITEM1
  • ITEM2
  • ITEM3

にはどうすれば適切にデータを変換することができますか?今は文字列として入れられます。

+0

現在使用しているコードを、期待どおりに機能しないように提供できますか? – Adrian

+0

のデータは上記の形式であり、各オブジェクトを通過してテーブルに表示されるng-repeatを実行しています。問題は、HTMLタグを表示するための変換ではなく、HTML全体を文字列として受け取り、その周りに置くことです。多くのファイルが相互に接続されているので、私はここにすべてのコードを書くことはできませんが、これは私が説明できる最高のものです。私は基本的に正しい書式を維持しながら、ユーザーがコンテンツから行を追加または減算できるCMSを作成しようとしています。 –

答えて

0

デフォルトでは、AngularJS(1.2+)はHTMLをテキストとして補間します。 この関数はAngularJSに組み込まれていますが、かもしれないが実際にテキストとして表示するのではなく、テンプレートにHTMLをレンダリングしたい場合があります(ここでのような場合があります)。

これを行うには、AngularJS '$sceライブラリを参照してください。お使いのコントローラでは、あなたはあなたがHTMLとしてのMySQLから取得したデータを信頼するように指定することができます:あなたのテンプレートで

$scope.explicitlyTrustedHtml = $sce.trustAsHtml('<div><span>Hello World!</span></div>'); 

ng-bind-htmlを使用してバインドしてください:

<div ng-controller="MyController as myCtrl"> 
    <div ng-bind-html="myCtrl.explicitlyTrustedHtml"></div> 
</div> 

あなたは絶対にが必要な場合を使用すると、アプリケーション全体で$sceを無効にすることができますが、これはであり、セキュリティ上の理由で大いにが推奨されていません。そう$sceProviderを注入しないために、あなたのメインモジュールの構成ブロックに次の行を追加します

$sceProvider.enabled(false); 

$sceライブラリは便利ですが、私のアドバイスは、MySQLにデータを再構築するためのより良い方法を見つけることであろう「あなたようにHTMLのためにそれを要求しないでください。データを読むだけであれば、セキュリティの観点からはかもしれません。が大丈夫でしょうか。しかし、ユーザーがAngularJSアプリケーションからHTMLスニペットをPOSTできるようにしていて、MySQLでこれらのスニペットを永続させている場合は、XSS攻撃を要求しています。

+0

この素敵な情報をBenに感謝して、$ sceライブラリでうまくいきました。ほんとうにありがとう !!! –

+0

ありがとう、もしあなたが答えをupvoteしてください:) –

関連する問題