0

我试图在ng-init里面调用函数ng-repeat,它只适用于第一个元素:

<li ng-repeat="comment in ad.comments|limitTo:quantity | orderBy : sortComment : true">
        <div id="starsDiv" ng-init="orderComment(comment.stars)"></div>
          Comment: {{comment.text}}
          <cite class="clearfix">  on {{comment.posted | date}}</cite>
</li>

内部orderComment函数ng-repeat需要初始化starDiv

$scope.orderComment= function(numOfStars){
                   var html = '<i class="fa fa-star-o" style="color:gold;"></i>';
                    for(var i =0 ; i<numOfStars-1;i++)
                    {
                        html += '<i class="fa fa-star-o" style="color:gold;"></i>';
                    }
                    document.getElementById("starsDiv").innerHTML = html;
                };

starsDiv通过 的值将 HTML 注入到comment.stars. 例如,如果注释等于 4,则将有 4 个 HTML 元素:

'<i class="fa fa-star-o" style="color:gold;"></i>'

在里面。

4

1 回答 1

1

一般来说,Angular 不鼓励自己对 DOM 进行更改,在这种情况下,没有必要这样做。

一个简单的解决方案可能是放入尽可能多的星星,并使用ng-show它仅显示我们需要的数量。假设有5颗星:

<i class="fa fa-star-o" style="color:gold;" ng-show="comment.stars > 0"></i>
<i class="fa fa-star-o" style="color:gold;" ng-show="comment.stars > 1"></i>
<i class="fa fa-star-o" style="color:gold;" ng-show="comment.stars > 2"></i>
<i class="fa fa-star-o" style="color:gold;" ng-show="comment.stars > 3"></i>
<i class="fa fa-star-o" style="color:gold;" ng-show="comment.stars > 4"></i>

如果您需要通用解决方案,您可以随时使用ng-repeat. 您只需要一个函数,该函数将接受一个数字并返回该大小的数组。您可以像这样使用数组。

<i class="fa fa-star-o" style="color:gold;" ng-repeat="x in array(comment.stars)"></i>

一个更通用的解决方案是创建一个自定义指令来呈现这些星星。我建议阅读自定义指令:https ://docs.angularjs.org/guide/directive

于 2015-11-02T16:39:10.447 回答