【问题标题】:how to show html content in trNgGrid with $sce.trustAsHtml如何使用 $sce.trustAsHtml 在 trNgGrid 中显示 html 内容
【发布时间】:2015-02-09 12:49:38
【问题描述】:

我有一个使用 trNgGrid.js 的带有搜索选项的表。我对 Sharepoint 列表进行查询,其中一列具有 html 内容,我想显示它。

为此,我在承诺中使用$sce.trustAsHtml,但这不起作用。因此,经过一些测试后,我注意到在执行$scope.requests.push(item) 之后,我可以执行以下操作:

$scope.requests[x].SubjectText = $sce.trustAsHtml($scope.requests[x].HTMLContent); 

这或多或少有效,因为 SubjectText 列不用于显示 html,所以它的作用是将其显示为纯文本。

另一方面,如果我这样做,什么也不会发生:

$scope.requests[x].HTMLContent = $sce.trustAsHtml(angular.copy($scope.requests[x].HTMLContent));

并且该列没有数据。最奇怪的是,如果我做的完全一样,但没有告诉我把值放在哪个项目上,那么 html 内容以完美的方式显示,但所有项目都具有相同的值,即最后一个承诺。

$scope.requests.HTMLContent = $sce.trustAsHtml(angular.copy($scope.requests[x].HTMLContent));

我在 trNgGrid 中进行了更改,以帮助我在 div 中有一个ng-bind-html,以防有文件名。

【问题讨论】:

    标签: javascript jquery html angularjs


    【解决方案1】:

    另一种选择是创建一个自定义列,您可以在其中使用ng-bind-html 指令:

    angular
            .module('myApp', ['trNgGrid'])
            .controller("MainCtrl", ["$scope", "$sce", function ($scope, $sce) {
                $scope.myItems = [
                         {
                             name: "Moroni", 
                             age: 50,
                             htmlContent: $sce.trustAsHtml('<i><b>HTML Content #1</b></i>')
                         },
                         {
                             name: "Tiancum", 
                             age: 43, 
                             htmlContent: $sce.trustAsHtml('<div class="text-danger">HTML Content #2</div>')
                         },
                         {
                             name: "Jacob", 
                             age: 27,
                             htmlContent: $sce.trustAsHtml('<div class="text-info">HTML Content #3</div>')
                         },
                         {
                             name: "Nephi", 
                             age: 29,
                             htmlContent: $sce.trustAsHtml('<div class="text-warning">HTML Content #4</div>')
                         },
                         {
                             name: "Enos", 
                             age: 99,
                             htmlContent: $sce.trustAsHtml('<pre>HTML Content #5</pre>')
                         }];
                }]);
    <link href="//maxcdn.bootstrapcdn.com/bootswatch/3.0.3/slate/bootstrap.min.css" rel="stylesheet"/>
    <link href="//moonstorm.github.io/trNgGrid/release/trNgGrid.min.css" rel="stylesheet"/>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.3.1/angular.min.js"></script>
    <script src="//moonstorm.github.io/trNgGrid/release/trNgGrid.min.js"></script>
    
    <body ng-app="myApp">
        <div ng-controller="MainCtrl">
            <table tr-ng-grid items="myItems" fields="['name','age']">
                <thead>
                    <tr>
                        <th><div></div></th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>
                            <div ng-bind-html="gridItem.htmlContent"></div>
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </body>

    如果您不将 HTML 与数据分开(我总是建议这样做),那么您需要 fields 属性来阻止网格自动获取 htmlContent 数据成员。

    【讨论】:

    • 我想根据属性 field-name 的值将标签显示为 html 元素,即如果 field-name 的值是 true 如果想要将标签显示为 并且如果 field-name 的值为 false 则
    猜你喜欢
    • 2011-02-07
    • 2017-10-06
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 2018-04-10
    • 2020-06-22
    相关资源
    最近更新 更多