根据结果​​

时间:2016-11-22 20:05:02

标签: angularjs filter angular-ui-bootstrap dropdown bootstrap-table

我正在尝试开发一个类似于Excel的表格过滤器,可以跨列应用任意数量的过滤器。

请查看我的code in plunkr。这对于过滤数据非常有效。但是我希望在更新数据时更新“过滤器”列表。我无法弄清楚如何解决这个问题。

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

});

例如(来自plunkr):
如果我们选择“India”,它将返回3个月2,3和7的记录。我希望月份过滤器列表显示结果(2,3,7)中的值,而不是显示所有值。 如果您需要任何进一步的信息,请与我们联系。

1 个答案:

答案 0 :(得分:0)

好的,这是一个完整的“黑客”,我确信有更好的方法可以做到这一点,但这至少可以让你解决问题。我分叉你的Plunker并进行了一些修改。我在您的国家/地区列表中添加了ng-change以显示或隐藏已过滤的月份:

                                <div class="dt-buttons btn-group">
                                    Selected Countries:<br>
                                    <select size="4" multiple ng-multiple="true" ng-model="selectedCountries" ng-options="country for country in countryList" ng-change="filterMonths()"></select>
                                </div>
                                <div ng-show="!countryselected" class="dt-buttons btn-group">
                                    Selected Months:<br>
                                    <select size="10" multiple ng-multiple="true" ng-model="selectedMonths" ng-options="month for month in monthList"></select>
                                </div>
                                <div ng-show="countryselected" class="dt-buttons btn-group">
                                    Selected Months:<br>
                                    <select size="10" multiple ng-multiple="true" ng-model="monthsSelected"><option ng-repeat="f in filtered">{{f.month}}</option></select>
                                </div>

然后在控制器中,我补充道:

    $scope.countryselected = false;
$scope.filterMonths = function(){
  $scope.countryselected = true;
}

如果我想到一个更好的方法,我会编辑我的答案,但这至少应该让你去。祝你好运!