ng-重复运行次数与整数参数一样多在某些情况下不起作用

ng-repeat run as many times as integer parameter doesn't work in some cases

本文关键字:一样 不起作用 情况下 运行 参数 整数 ng-      更新时间:2023-09-26

我想运行角度与传递给它的整数值一样多。

编辑:我简化了这个例子,因为最初我使用函数根据传递给它的数字返回数组。

.HTML

<body ng-app="userFilterModule">
    <div class="container-fluid" ng-controller="UserfilterController as Ctrl">
         <div class="row">
             <div class="filter_tableTbody col-xs-12">                        
                <div class="row filter_tableRow" ng-repeat="user in Ctrl.obj_users">
                    <!-- ... -->
                    <div class="col-xs-2">
                        <span class="filter_rateStars" ng-repeat="a in Ctrl.ratingArr| limitTo: user.rate">    
                            &#x2605;
                         </span>
                         <span class="filter_rateStars notActive" ng-repeat="a in Ctrl.ratingArr| limitTo: 5 - user.rate">    
                            &#x2606;
                         </span>
                    </div>                    
                </div>                    
            </div>
        </div>
    </div>                
</body>

如果ratingArr包含数字,一切正常,

例如
app.controller('UserfilterController', function ($scope) {
    this.int_male_counter = this.int_female_counter = 5;
    this.str_sort_by = {
        prop_name: 'f_name',
        order: 'asc'
    };
    //problem starts here
    this.ratingArr = [1,2,3,4,5];
    this.obj_users = new Users(this.int_male_counter, this.int_female_counter).list;
    this.fn_set_sorting = function (str) {
        if (this.str_sort_by.prop_name === str) {
            this.str_sort_by.order = this.str_sort_by.order === 'des' ? 'asc' : 'des';                
        } else {
            this.str_sort_by.order = 'asc';
            this.str_sort_by.prop_name = str;                
        }
        this.obj_users.sortByObjKeyVal(this.str_sort_by.prop_name, this.str_sort_by.order);
    };
    this.fn_setlected_filter = function (str) {
        return str === this.str_sort_by.prop_name;
    };
    this.fn_is_descending = function(){
        return this.str_sort_by.order === 'des';
    };      
});

但是当我将其更改为new Array(5)['','','','','']['a','a','a','a','a']

我在控制台中收到错误:Error: [ngRepeat:dupes]为什么?

谢谢!

默认情况下,不能在 ng-repeat 处理的数组中使用相同的值。引用文档

error:dupes

Duplicate Key in Repeater

如果ngRepeat表达式中存在重复键,则发生。 重复键被禁止,因为 AngularJS 使用键来关联 DOM 包含项目的节点。

默认情况下,集合通过引用进行键控,这是需要的 最常见的模型,但对于 实习(共享参考(。

如同一文档中的建议,只需使用track by $index后缀(以便项目将按其在数组中的位置而不是其值进行键控(来解决问题:

<span class="filter_rateStars" 
      ng-repeat="a in Ctrl.ratingArr | limitTo: user.rate track by $index">