2017-03-15 41 views
0

我使用Angular作爲前端,節點作爲後端。從mySQL呈現HTML以在頁面上顯示Angular和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" 
    }, 

我從一個MySQL數據庫,在那裏我有手動將其存儲在文本格式,但用HTML標籤就可以了,即獲取數據當我把表中的數據,我想表顯示HTML格式的數據,但它表明在所有的HTML在網頁上看到這樣

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

標籤的原始格式,但我想是這樣這

  • 物品1
  • ITEM2
  • 項目3

我怎樣才能正確地轉換數據,以便它是由瀏覽器作爲HTML閱讀?現在它被放入一個字符串中。

+0

你能提供你現在使用的代碼不能按預期工作嗎? – Adrian

+0

數據的格式如上所示,我正在運行ng-repeat,它遍歷每個對象並將其顯示在表格中。問題在於它沒有將HTML標籤轉換爲顯示,而是將整個HTML作爲一個字符串並在其周圍放置「」。我不能把所有的代碼放在這裏,因爲有很多文件相互關聯,但這是我能解釋的最好的。我基本上試圖製作一個cms,用戶可以在內容中添加或減少行,同時保持正確的文檔格式。 –

回答

0

默認情況下,AngularJS(1.2+)會將HTML插值爲文本。 此功能內置於AngularJS中以避免XSS問題,但有時(例如您的情況)您可能在其中可能實際上想要在模板中呈現HTML而不是將其顯示爲文本。

爲此,請查看AngularJS'$sce圖書館。在你的控制器,你可以指定你要相信你從MySQL中檢索作爲HTML數據:

$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代碼片段並將這些代碼片段保留在MySQL中,那麼您就是在尋求XSS攻擊。

+0

感謝Ben提供了這段精彩的信息,它在$ sce庫中工作得很好。對此,我真的非常感激 !!! –

+0

謝謝,如果你可以請upvote答案:) –