2017-03-15 58 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答案:) –