【问题标题】:'ng-bind-html-unsafe' doesn't display anything'ng-bind-html-unsafe' 不显示任何内容
【发布时间】:2017-07-10 07:27:29
【问题描述】:

我正在显示一个字符串,其中包含来自 JSON 的 HTML 代码。 请检查第二个对象中的“名称”属性。

但是,当我使用“ng-bind-html-unsafe”时,它不会显示任何内容。

我也使用过 ngSanitize。

你能帮我弄清楚我的代码有什么问题吗?

angular.module('myApp', ['ngSanitize']).controller('myCtrl', ['$scope', '$sce', function($scope, $sce){
  $scope.card = [{
    Name: "New Year Celebration",
    Description: "",
    Venue: "",
    StartDate: "Fri Dec 29 2017 23:30:00 GMT+0530",
    EndDate: "Sat Dec 30 2017 00:30:00 GMT+0530",
    EventID: "1"
  }, {
    Name: "<P>25th Anniversary Celebration</P>",
    Description: "25th Anniversary Celebration of organization",
    Venue: "Auditorium",
    StartDate: "Wed May 31 2017 17:30:00 GMT+0530",
    EndDate: "Wed May 31 2017 20:30:00 GMT+0530",
    EventID: "2"
  }, {
    Name: "Annual Day",
    Description: "",
    Venue: "",
    StartDate: "Fri Oct 13 2017 14:30:00 GMT+0530",
    EndDate: "Fri Oct 13 2017 17:30:00 GMT+0530",
    EventID: "3"
  }];
  
  $scope.trustAsHtml = function(html) {
	return $sce.trustAsHtml(html);
  }
  $scope.add = function(eventObj) {
  $scope.eventID= this.eventObj.EventID;
  $scope.startDate= this.eventObj.StartDate;
    $scope.endDate= this.eventObj.EndDate;
    $scope.venue= this.eventObj.Venue;
    $scope.subject= this.eventObj.Name;
    $scope.result= this.eventObj.Description;
  //console.log(this);
    $scope.icsMSG = "BEGIN:VCALENDAR\nVERSION:2.0\nBEGIN:VEVENT\nDTSTART:" + $scope.startDate +"\nDTEND:" + $scope.endDate +"\nLOCATION:" + $scope.venue + "\nSUMMARY:" + $scope.subject + "\nDESCRIPTION:"+ $scope.result +"\nEND:VEVENT\nEND:VCALENDAR";
	window.open("data:text/calendar;charset=utf8," + escape($scope.icsMSG),"_self");
  };
}]);
.event {
  height: 150px;
  width: 250px;
  border: 1px solid lightgrey;
  background-color: skyblue;
  margin: 10px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.6.5/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-sanitize/1.6.5/angular-sanitize.js"></script>

<div ng-app="myApp" ng-controller="myCtrl">
  <div ng-repeat="eventObj in card" class="event">
  Subject: <span ng-bind-html="trustAsHtml(eventObj.Name)"></span>
  <br /><br />	
  Venue:<span>{{eventObj.Venue}}</span>
  <br /><br />	
  Date:<span>{{eventObj.StartDate | date:'fullDate'}}</span>
  <br /><br />
  <button ng-click="add(eventObj.EventID)">Add to Outlook</button>
  </div>
</div>

【问题讨论】:

  • 告诉我们您的网络控制台告诉您什么错误。类似于它被阻止的地方。
  • 哦,别忘了禁用任何广告拦截器,否则它将无法加载
  • 我更新了任何答案。这是工作演示。 plnkr.co/edit/sFhaSJ2Ir9PYUObdtcnj?p=preview
  • @sunny 更新的答案是否解决了问题?

标签: angularjs json object ng-bind-html ngsanitize


【解决方案1】:

您使用的是 Angular 1.6.x,而 ng-bind-html-unsafe 早就被弃用了。您可以使用:ng-bind-html

<div ng-bind-html="eventObj.Name"></div>

注意:在您的控制器中,注入$sce

编辑 1: 在你的控制器中添加这个方法:

过滤器:

angular.module('myApp')
.filter('to_trusted', ['$sce', function($sce){
    return function(text) {
         var doc = new DOMParser().parseFromString(text, "text/html");
         var   rval= doc.documentElement.textContent;
        console.log(rval)
        return $sce.trustAsHtml(rval)
    };
}]);

HTML

<div ng-app="myApp" ng-controller="myCtrl">
  <div ng-repeat="eventObj in card" class="event">
  Subject: <span ng-bind-html="eventObj.Name|to_trusted"></span>
  <br /><br />  
  Venue:<span>{{eventObj.Venue}}</span>
  <br /><br />  
  Date:<span>{{eventObj.StartDate | date:'fullDate'}}</span>
  <br /><br />
  <button ng-click="add(eventObj.EventID)">Add to Outlook</button>
  </div>
</div>

工作演示:https://plnkr.co/edit/sFhaSJ2Ir9PYUObdtcnj?p=preview

【讨论】:

  • 谢谢!但它部分工作!请检查上面sn-p中的更新代码。
  • 检查this answer。您需要将不受信任的 html 设置为受信任。
  • 它不起作用。可能是我使用不正确。你能帮帮我吗?
  • 好的。检查问题
  • 我猜是因为多个特殊字符 '<'和'>'包裹在 p 标签周围。
猜你喜欢
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 2013-06-18
  • 1970-01-01
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
相关资源
最近更新 更多