Javascript 在angular js智能表中按多个布尔属性筛选
我有以下情况: 指标列表,每个指标都有属性名称、描述、基本和差异Javascript 在angular js智能表中按多个布尔属性筛选,javascript,angularjs,smart-table,Javascript,Angularjs,Smart Table,我有以下情况: 指标列表,每个指标都有属性名称、描述、基本和差异 $scope.indicators = [ { name: 'indicator1' , description: 'blah1', essential: true, differential: false }, { name: 'indicator2' , description: 'blah2', essential: false, differential: true }, { name: 'indicator3
$scope.indicators = [
{ name: 'indicator1' , description: 'blah1', essential: true, differential: false },
{ name: 'indicator2' , description: 'blah2', essential: false, differential: true },
{ name: 'indicator3' , description: 'blah3', essential: true, differential: true },
{ name: 'indicator4' , description: 'blah4', essential: false, differential: false }
]
我希望能够通过选择以下组合进行过滤:
“全部”、“基本”、“差异”、“基本和差异”、“既不基本也不差异”
我曾尝试在与|filter关联的ng repeat选择中使用ng model,但这破坏了分页
我想不出使用st search指令的方法,因为我正在过滤两个属性的组合
有人有什么建议吗
使用示例代码跟随plunker:
谢谢 我就是这样做的 在控制器中,使用可能的选项和每个选项的过滤器定义一个数组,如下所示:
$scope.options = [
{value:'All', filter:{}},
{value:'Essential', filter:{essential:true}},
{value:'Differential', filter:{differential:true}},
{value:'Essential and Differential', filter:{differential:true, essential:true}},
{value:'Neither Essential nor Differential', filter:{differential:false, essential:false}}
];
<select ng-model='diffEssFilter' ng-options='option.value for option in options'>
</select>
<tr ng-repeat="indicator in indicators | filter:diffEssFilter.filter">
然后在html中使用此数组声明选择,如下所示:
$scope.options = [
{value:'All', filter:{}},
{value:'Essential', filter:{essential:true}},
{value:'Differential', filter:{differential:true}},
{value:'Essential and Differential', filter:{differential:true, essential:true}},
{value:'Neither Essential nor Differential', filter:{differential:false, essential:false}}
];
<select ng-model='diffEssFilter' ng-options='option.value for option in options'>
</select>
<tr ng-repeat="indicator in indicators | filter:diffEssFilter.filter">
就这样
搜索是累积的,因此如果使用多个调用控制器api
search
,则可以添加谓词
只要确保在值更改时重置sortPredicate对象
展示了如何根据您的需求编写插件(尽管我不知道在这种情况下all
是什么)
.directive('customSearch',function(){
return {
restrict:'E',
require:'^stTable',
templateUrl:'template.html',
scope:true,
link:function(scope, element, attr, ctrl){
var tableState=ctrl.tableState();
scope.$watch('filterValue',function(value){
if(value){
//reset
tableState.search.predicateObject ={};
if(value==='essential'){
ctrl.search('true', 'essential');
} else if(value === 'differential'){
ctrl.search('true', 'differential')
} else if(value === 'both'){
ctrl.search('true','essential');
ctrl.search('true', 'differential');
} else if(value === 'neither'){
ctrl.search('false','essential');
ctrl.search('false', 'differential');
}
}
})
}
};});
我想到了这一点,但在这个特定的情况下,这将不起作用,因为它会破坏智能表分页。当我不使用st search进行筛选时,页面计数似乎不会更新:/@t抱歉,我对“智能表”不是很熟悉,在plunker中,我设置的一切似乎都正常工作,所以我不太理解问题是,如果你想为我提供一个plunker,如果我能看到你的问题被复制,我会尽力帮助你解决这个问题。谢谢!谢谢@laurent!它像一个符咒一样工作,现在我明白了它是如何工作的!我可以从这里继续!如果一个人想在一个子集中的每一个道具上过滤怎么办。我正在尝试过滤m同时具有多个显式属性。