【问题标题】:AngularJS ng-options to exclude specific objectAngularJS ng-options 排除特定对象
【发布时间】:2014-10-06 11:28:54
【问题描述】:

我正在使用angular ng-options来显示一个带有几个选项作为当前类别的父类别的选择,基本上这些选项包含所有现有类别,我需要从ng-options中排除当前类别,这很有意义,因为类别不能是其自身的父类别。那么我该怎么做呢?目前我有以下代码:

<tr ng-repeat="category in allCategories">
    <th ng-bind="category.name"></th>
    <th>
        <select ng-options="everyCategory.name for everyCategory in allCategories">
            <option value="">Select parent category</option>
        </select>
    </th>
</tr>

【问题讨论】:

    标签: angularjs ng-options


    【解决方案1】:

    你应该使用过滤器。

    <select ng-options="everyCategory.name for everyCategory in allCategories | filter: { name: '!' + category.name }">...</select>
    

    【讨论】:

    • 像魅力一样工作。谢谢,我接受这两个作为正确答案
    • 我看到这有问题,假设当前类别名称为“马”,还有另一个类别名为“白马”,使用此过滤器过滤掉这两个类别,但我想要的是只过滤当前类别“马”。
    【解决方案2】:

    你可以使用过滤器

    <tr ng-repeat="category in allCategories">
      <th>{{category.name}}</th>
      <th>
        <select ng-options="everyCategory.name for everyCategory in allCategories | filter: {name: '!' + category.name}" ng-model="somthing">
          <option value="">Select parent category</option>
        </select>
      </th>
    </tr>
    

    我创建了一个小小提琴,并附有如何使用它的示例:http://jsfiddle.net/krausekjaer/tnqrqk2w/3/

    【讨论】:

    • 像魅力一样工作!谢谢,我接受这两个作为正确答案。
    【解决方案3】:

    感谢@Krause 和@Kamil R 的回答,但是我在使用他们的解决方案时发现了一个问题,正如我在之前的 cmets 中提到的那样,如果有 2 个类别的一个名称作为另一个名称的子字符串,则过滤器会划掉他们两个。例如,以下类别: 糖果 糖果棒 使用

    filter: { name: '!' + category.name }
    

    会将它们都过滤掉,为了确保只有一个被过滤,我最终编写了一个自定义过滤器:

    app.filter('parentTaxonomyFilter', function(){
        return function(items, name){
            var arrayToReturn = [];        
            for (var i = 0; i < items.length; i ++){
                if (items[i].name != name) {
                    arrayToReturn.push(items[i]);
                }
            }
            return arrayToReturn;
        };
    });
    

    在 html 中,我使用这样的过滤器:

    <select class="form-control" ng-init="taxonomy.parentTaxonomy=getParentTaxonomy(taxonomy)" ng-model="taxonomy.parentTaxonomy" ng-options="everyTaxonomy.name for everyTaxonomy in data.allTaxonomies|parentTaxonomyFilter:taxonomy.name">
        <option value="">select parent taxonomy</option>
    </select>
    

    【讨论】:

      【解决方案4】:

      试试这个

      <tr ng-repeat="category in allCategories">
        <th>{{category.name}}</th>
        <th>
          <select ng-options="everyCategory.name for everyCategory in allCategories | filter: { name: '!' + category.name }" ng-model="somthing">...</select>
            <option value="">Select parent category</option>
          </select>
        </th>
      </tr>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多