2016-09-22 38 views
0

我有两个阵形是这样的:角NG选项有条件的价值

$scope.values_array = ['string1', 'string2', 'string3', 'string4']; 
$scope.skip_array = ['string2', 'string3']; 

,我尝试使用NG选项是这样的:

<select ng-options="value as value for value in values_array && skip_array.indexOf(value) === -1"></select> 

这不会产生错误,但在下拉菜单中不会显示任何错误。如果没有“& & skip_array.indexOf(value)”,它将显示values_array中的所有选项。

回答

6

HTML:

<select ng-model="selectedValue" ng-options="value as value for value in values_array | filter:skipValues"></select> 

控制器:

$scope.skipValues = function(value, index, array) { 
    return $scope.skip_array.indexOf(value) === -1; 
}; 
$scope.values_array = ['string1', 'string2', 'string3', 'string4']; 
$scope.skip_array = ['string2', 'string3']; 

jsfiddle

UDPATE:

如果你想一个额外的参数传递给过滤函数

HTML:

<select ng-model="selectedValue" ng-options="value as value for value in values_array | filter:skipValues(1)"></select> 

控制器:

$scope.skipValues = function(anInt) { 
    return function(value, index, array) { 
     return $scope.skip_array.indexOf(value) === -1 && anInt > 0; 
    } 
}; 
$scope.values_array = ['string1', 'string2', 'string3', 'string4']; 
$scope.skip_array = ['string2', 'string3']; 

jsfiddle

+0

如果我想添加一个额外的参数,在我来说,我希望它能够它的基础上跳过一个int,如何添加这个参数给函数? (使用1参数调用函数并将其添加到函数不起作用) – schuimer

+0

@schuimer我已经更新了我的文章并提供了针对您的问题的解决方案。 –

+0

工程就像一个魅力!非常感谢你! – schuimer

1

如何使用filter?像

<select ng-options="value as value for value in (values_array | yourFilter)"></select> 

yourFilter可能是一个在this answer行:

.filter('inArray', function($filter){ 
    return function(list, arrayFilter, element){ 
     if(arrayFilter){ 
      return $filter("filter")(list, function(listItem){ 
       return arrayFilter.indexOf(listItem[element]) != -1; 
      }); 
     } 
    }; 
}); 
1

只需使用一个function,将返回的筛选值。你也可以使用一个单独的filterfunction应该是在这种情况下

<select name="mySelect" id="mySelect" ng-model="mySelectmodel" ng-options="value as value for value in filteredValues(values_array)"> 

$scope.filteredValues = function() { 
    return $scope.values_array.filter(function (val) { 
     return $scope.skip_array.indexOf(val) === -1; 
     }); 
    }; 

这里更容易为全工作示例

FULL EXAMPLE

0

的Html

<select ng-modal="yourmodalname" ng-options="x.id as x.name for x in arraylistofvalue | filter : selectedvalues"></select 

角控制器

$scope.selectedvalues = function(value , index , array){ 
    if (value.id == 1){ 
      return $scope.arraylistofvalue.indexOf(value); 
     } 

     } 

数组列表

$scope.arraylistofvalue = [{id : 1 ,name : 'value1'}{id : 2 ,name : 'value2'}]