使用ng-repeat和' unique'的问题

时间:2015-07-22 08:41:43

标签: javascript angularjs checkbox angularjs-ng-repeat angular-ui

我的问题令人费解。当我使用$clientid重复我的数据创建复选框时,它可以正常工作。我会得到我提到的所有东西,并且它们有重复。下面是一个片段。

ng-repeat

正如您所看到的,&#39; unique&#39;在那里,我正在使用Angular UI。有许多重复的引用,因为我使用复选框作为过滤器,我只需要不同的复选框,而不是像引用的时间那样多的复选框,这就是 <label ng-if="project.score !='0'" data-ng-repeat="project in projects | unique:'c.projectRef' | orderBy:'c.projectRef'"> <input id="project.c.projectRef" type="checkbox" ng-click="toggleSelection(project.c.projectRef)" ng-checked="selectedRefs.indexOf(project.c.projectRef) > -1" /> <span>{{project.c.projectRef}}</span> </label> 单独执行的操作。

它的功能与我完全相同,如果我删除了唯一的但当我在发生的事情中有独特之处而不是给我几个全部唯一的复选框时,它只给我一个复选框。

从我正在测试的内容来看,当您对其进行更深入的引用(ng-repeat时,如果您提及(抱歉我不知道其中的术语)数据,就会发生这种情况。反对project.c.projectRef

我对此问题感到困惑,因此我们将非常感谢任何修复以及有关该问题的信息。

1 个答案:

答案 0 :(得分:0)

这实际上是我怀疑的。 Angular UI不喜欢嵌套引用,您必须编辑angular-ui.js文件并用此添加替换唯一函数。

.filter('unique', function () {

return function (items, filterOn) {



    if (filterOn === false) {

        return items;

    }



    if ((filterOn || angular.isUndefined(filterOn)) && angular.isArray(items)) {

        var hashCheck = {}, newItems = [];



        var extractValueToCompare = function (item) {

            if (angular.isObject(item) && angular.isString(filterOn)) {



                var resolveSearch = function(object, keyString){

                    if(typeof object == 'undefined'){

                        return object;

                    }

                    var values = keyString.split(".");

                    var firstValue = values[0];

                    keyString = keyString.replace(firstValue + ".", "");

                    if(values.length > 1){

                        return resolveSearch(object[firstValue], keyString);

                    } else {

                        return object[firstValue];

                    }

                }



                return resolveSearch(item, filterOn);

            } else {

                return item;

            }

        };



        angular.forEach(items, function (item) {

            var valueToCheck, isDuplicate = false;



            for (var i = 0; i < newItems.length; i++) {

                if (angular.equals(extractValueToCompare(newItems[i]), extractValueToCompare(item))) {

                    isDuplicate = true;

                   break;

                }

            }

            if (!isDuplicate) {

                if(typeof item != 'undefined'){

                    newItems.push(item);

                }

            }



        });

        items = newItems;

    }

    return items;