【问题标题】:ng-bind-html using a function not recognizing temporary variable form ng-repeatng-bind-html 使用无法识别临时变量形式的函数 ng-repeat
【发布时间】:2015-02-19 00:23:31
【问题描述】:

我是编程新手,这是我必须发布的第一个问题。

我要做的是使用ng-bind-html 将五个图像文件放入由ng-repeat 创建的div 中。这五个图像文件将在ng-repeat 中的每个元素之间有所不同。

<div ng-repeat = "newGame in myGamesList">
            <div class="col-sm-4 col-lg-4 col-md-4">
                <div class="thumbnail">
                    <div>
                        <img src="{{newGame.thumbnail}}" alt="">
                    </div>
                    <div class="caption">
                        <h4 class="pull-right">{{newGame.price}}</h4>
                        <h4><a ng-style="{'font-size': nameSize((newGame.name | removeSubName).length)}" class="categoryGameName" href="#details/{{myGamesList.indexOf(newGame)}}">{{newGame.name | removeSubName}}</a>
                        </h4>
                        <p>{{newGame.description}}</p>
                    </div>
                    <div id="ratingDiv" style="margin-left: 8px; margin-right: 8px; margin-bottom: 5px;">
                        <div style="display: inline-block" ng-bind-html="trustedHtml"></div>
                        <p class="pull-right" style="color: #d17581">{{newGame.numberReviews}} reviews</p>
                    </div>
                </div>
            </div>
        </div>

我在myApp 中也有这个,sce 未定义等没有问题。

$scope.html = getStars(newGame);
$scope.trustedHtml = $sce.trustAsHtml($scope.html);

如果我将getStars(newGame) 中的newGame 替换为代码工作范围内定义的内容,但是使用newGame(尝试与ng-repeat = "newGame in myGamesList" 中的临时变量匹配),什么也不会出现。

我怎样才能使newGame 被识别为正在迭代的每个元素?

函数getStars有如下代码

$scope.getStars = function(game) {
    var numStars = (game.numberStars);
    iconString = '';
    for (i=0; i<Math.floor(numStars); i++) {
        iconString += '<img style="width:16px" class="starGlyph" src="images/fullStar.png" alt=""/>'
    }
    if (numStars%1 == 0.5) {
        iconString += '<img style="width:16px" class="starGlyph" src="images/halfStar.png" alt=""/>'
    }
    for (j=0; j<(5-Math.ceil(numStars)); j++) {
        iconString += '<img style="width:16px" class="starGlyph" src="images/emptyStar.png" alt=""/>'
    }
    return iconString;
};

如果有帮助的话。澄清一下,我需要myGamesList 中的每个newGame 作为getStars 函数的输入参数。

对不起,如果这很难理解,但我试图覆盖我所有的基地!

【问题讨论】:

    标签: javascript html angularjs ng-repeat ng-bind-html


    【解决方案1】:

    你的$scope.html来自哪里?

    你应该做的是在你的ng-bind-html中使用newGame,如下所示

    <div style="display: inline-block" ng-bind-html="getTrustedHtml(newGame)"></div>
    

    在你的控制器中

    $scope.getTrustedHtml = function(game) {
      // get the game HTML
      var html = $scope.getStars(game);
      // Return it as trusted HTML for ngBindHtml
      return $sce.trustAsHtml(html);
    }
    

    【讨论】:

    • 当您说“您的 $scope.html 来自哪里?”时,我不完全确定您的意思。如果有帮助,它将在“myApp”控制器的范围内声明。我尝试了你所说的,但它不起作用(没有任何显示)。我还替换了 var html = $scope.getStars(game.html); with var html = $scope.getStars(game);那也没有用。 (getStars函数返回一串5个图片标签,就是我想用ng-bind-html绑定到我的div中的html。)
    • 我的意思是在你的代码中你绑定了$scope.html,但这永远不会改变,所以在每个ng-repeated元素中都是一样的(我不清楚myApp是什么以及你如何可以访问其中的newGame)。你是对的,应该是$scope.getStars(game),我已经确定了我的答案。你能 console.log 行var html = ... 返回什么吗?如果这是正确的,那应该可以。
    • 有效!老实说,当我尝试您编辑的答案时,我真的不知道为什么它没有更早地工作,但现在可以了!这可能是缓存问题,因为您的确切答案解决了它。非常感谢!
    • 太棒了!不要忘记为答案投票,这样它可以帮助其他面临同样问题的人:) 谢谢
    • 我试着给它点赞,但我首先需要 15 点声望,一旦我得到它,我一定会回来给它点赞
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-09
    • 1970-01-01
    相关资源
    最近更新 更多