如果数组中已存在id,则隐藏特定的ng-option

时间:2014-09-10 16:15:50

标签: javascript arrays angularjs

我有一个下拉列表,可以在页面上添加绑定到$ scope的项目。我基本上想确保我不向数组中添加双精度因此我的想法是如果数组中已经存在选项则隐藏该选项。我不知道是否可以做这样的事情,因为ng-options在select中,所以我不知道我是否可以在第一时间附加一个ng-hide。

无论如何,如果可能,我想隐藏该选项,如果它的id已存在于范围中。

我以为你会绕过每一个并检查,这是我的尝试

$scope.checkifExist = function () {
    var ifExist = false;
    angular.forEach($scope.promptsPlease, function (data) {

        if (data.id == $scope.promptsPlease.id){

            ifExist = true;
        }

    });
    return ifExist;

    };

所以控制器中的选择看起来像

  <select ng-model="fadingSelected" ng-options="type.name for type in fadingTypes track by type.id" ng-hide="checkIfExist()">
            </select>

我不知道这是否可行,我想我可能只是接近这一切都错了。这个想法就是这样,我不能将相同的两次添加到绑定到范围的数组中。它不一定非必须隐藏,它会很好。任何帮助,将不胜感激!谢谢你的阅读。

2 个答案:

答案 0 :(得分:1)

此上一个答案可能适用于您的问题(https://stackoverflow.com/a/19329910/1036025)。

这是包含的演示(plunker):http://plnkr.co/edit/Sf3el0FyUptWq28XqZnI?p=preview

它说明了实现这一目标的3种方法。一个是使用库lodash来操纵您的数据并创建可用选项的过滤列表,而不是使用angular.each

我建议您查看说明中的第3个解释选项(使用过滤器替代)。

答案 1 :(得分:0)

我认为只有在ng-repeat选项标签

时才有可能
<select ng-model="fadingSelected">
    <option ng-if="checkIfExist()" ng-bind="type.name" ng-value="type.id" ng-repeat="type in fadingTypes track by type.id"></option>
</select>