Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用AngularJS模板呈现html_Javascript_Angularjs - Fatal编程技术网

Javascript 如何使用AngularJS模板呈现html

Javascript 如何使用AngularJS模板呈现html,javascript,angularjs,Javascript,Angularjs,这是我的模板: 这是我的视图模板: {{stuff.title} {{stuff.content} 我将内容作为html获取,我想在视图中显示它,但我得到的只是原始html代码。如何呈现该HTML?使用- <span ng-bind-html="myContent"></span> 您需要告诉angular不要转义它。因此,您可能希望在index.html中包含此文件,以加载库、脚本,并使用视图初始化应用程序: <html> <body

这是我的模板:


这是我的视图模板:

{{stuff.title}
{{stuff.content}
我将
内容
作为html获取,我想在视图中显示它,但我得到的只是原始html代码。如何呈现该HTML?

使用-

<span ng-bind-html="myContent"></span>


您需要告诉angular不要转义它。

因此,您可能希望在index.html中包含此文件,以加载库、脚本,并使用视图初始化应用程序:

<html>
  <body ng-app="yourApp">
    <div class="span12">
      <div ng-view=""></div>
    </div>
    <script src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
    <script src="script.js"></script>
  </body>
</html>
最后,您必须配置路由并为其$scope(即您的数据对象)分配要查看的控制器


我还没有对此进行测试,如果有错误,很抱歉,但我认为这是获取数据的Angularish方法

您应该遵循Angular文档并使用$sce-$sce是一种为AngularJS提供严格上下文转义服务的服务。这是一份文件:

让我们以异步加载Eventbrite登录按钮为例

在控制器中:

someAppControllers.controller('SomeCtrl', ['$scope', '$sce', 'eventbriteLogin', 
  function($scope, $sce, eventbriteLogin) {

    eventbriteLogin.fetchButton(function(data){
      $scope.buttonLogin = $sce.trustAsHtml(data);
    });
  }]);
在您看来,只需添加:

<span ng-bind-html="buttonLogin"></span>

为此,我使用自定义过滤器

在我的应用程序中:

myApp.filter('rawHtml', ['$sce', function($sce){
  return function(val) {
    return $sce.trustAsHtml(val);
  };
}]);
然后,在视图中:

<h1>{{ stuff.title}}</h1>

<div ng-bind-html="stuff.content | rawHtml"></div>
{{stuff.title}

在angular 4+中,我们可以使用
innerHTML
属性而不是
ng bind html

在我的例子中,它正在工作,我正在使用angular 5

<div class="chart-body" [innerHTML]="htmlContent"></div>

In.ts文件

let htmlContent = 'This is the `<b>Bold</b>` text.';
让htmlContent='这是'Bold'文本';

HTML从何而来?在不同的情况下,您需要
ngBindHtmlUnsafe
ngSanitize
或自定义指令。html来自我的数据库内容是否绝对可信?例如,如果html包含
脚本
标记,浏览器将执行它。这种类型的“注入”攻击是破坏应用程序和窃取用户数据的常见方式。AngularJS有一个单独的模块,名为
ngSanitize
,可以用来去除HTML中的任何危险标记;它还有一个名为的指令,其工作原理类似于
ngBindHtmlUnsafe
,但会为您去除危险标签。如果内容完全是你的-并且不是来自用户或第三方-那么你就不需要它。AngularJS 1.2中API的可能副本已经更改。由于angular的“hell docs”,amccausl为angular的新用户节省了无数个小时的调试时间,ng bind html不安全已被弃用,请参考上面评论中的链接来解决问题。我只是插入了我的模板,没有做任何其他事情,效果非常好。我不需要注入$sce。以下是文档:ngSanitize-我在这里使用答案时缺少的一件事(你可以从ngbind html上的angular文档中获得)是你需要确保你的应用程序包含ngSanitize模块。没有这一点,它就无法工作。
ng bind html
单独工作,而不使用
trustAsHtml
这是一个极好的解决方案@Daniel。如果我使用的是
$sce.trustAsHtml
,我不需要将
ngSanitize
依赖项包含到应用程序模块中?我使用的是Angular 1.3我们可以使用ng include来实现吗?这对我不起作用,我使用的是Angular 7。请提出解决方案。谢谢。如果我想要同样的行为,但不依赖routeProvider呢?使用ui路由器也是一样的,只是它是$stateProvider而不是$routeProvider和.state('yourState',{url:'/',templateUrl:'yourView.html',controller:'YourCtrl'});
myApp.filter('rawHtml', ['$sce', function($sce){
  return function(val) {
    return $sce.trustAsHtml(val);
  };
}]);
<h1>{{ stuff.title}}</h1>

<div ng-bind-html="stuff.content | rawHtml"></div>
<div class="chart-body" [innerHTML]="htmlContent"></div>
let htmlContent = 'This is the `<b>Bold</b>` text.';