【问题标题】:Problems using ng-repeat and 'unique'使用 ng-repeat 和 'unique' 的问题
【发布时间】:2015-07-22 20:19:46
【问题描述】:

我的问题令人费解。当我使用ng-repeat 重复我的数据以创建复选框时,它按我的预期工作。我会得到我提到的所有东西,它们有重复。下面是一个sn-p。

 <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>

如您所见,'unique' 就在其中,我为此使用了 Angular UI。有许多重复的引用,当我使用复选框作为过滤器时,我只想要不同的复选框,而不是与引用它的时间一样多的复选框,这就是 ng-repeat 单独会做的事情。

如果我删除唯一的,它的功能完全一样,但是当我有唯一的时候发生的事情不是给我几个都是唯一的复选框,它只是给我一个复选框。

从我一直在测试的情况来看,当您对数据有更深入的引用时,似乎会发生这种情况(对不起,我不知道它的术语),因此project.c.projectRef 而不是project.projectRef

我被这个问题难住了,所以任何修复以及有关该问题的信息将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    事实上,这正是我所怀疑的。 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-27
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多