在角度ui网格中使用外部过滤两次点火

时间:2016-08-15 19:34:05

标签: javascript angularjs angular-ui-grid

我已经完成了this issue,但是,我遇到了应用过滤器奇怪触发的问题。让我试着向你解释一下。第一个过滤请求如下:

?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7  OPTIONS 200 xhr angular.js:11881    505 B   17 ms   
?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7  GET 200 xhr Other   15.3 KB 92 ms   

我们有选择权,而且我们已经获得,很好。接下来,我们应用第二个过滤器,请求如下:

?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7  GET 200 xhr angular.js:11881    15.3 KB 94 ms   
?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7;studyId==231 OPTIONS 200 xhr angular.js:11881    505 B   21 ms   
?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7;studyId==231 GET 200 xhr Other   15.8 KB 48 ms   
?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7  OPTIONS 200 xhr angular.js:11881    505 B   22 ms   

由于某种原因,请求被解雇了两次。接下来,我们应用第三个过滤器,请求如下:

?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7;studyId==231 OPTIONS 200 xhr angular.js:11881    505 B   18 ms   
?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7;studyId==231;statusId==5 OPTIONS 200 xhr angular.js:11881    505 B   19 ms   
?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7;studyId==231 GET 200 xhr Other   15.8 KB 43 ms   
?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7;studyId==231;statusId==5 GET 200 xhr Other   1.1 KB  27 ms   
?$orderby=id-&pageSize=25&pageNbr=1&$filter=eventTypeId==7  GET 200 xhr Other   15.3 KB 95 ms

我们可以看到请求再次触发两次,但在最后它只发送了一个额外的请求,只有第一个过滤器。

有人可以向我解释我的错误在哪里吗?提前致谢。 我的过滤器代码:

  gridApi.core.on.filterChanged( $scope, function() {
                // Declare vars
                var grid = this.grid;
                var columns = grid.columns;
            $scope.columnTitle = grid.columns[1].filters[0].term;
            $scope.columnDesc = grid.columns[2].filters[0].term;
            var columnType = grid.columns[3].filters[0].term;
            var columnStudy = grid.columns[4].filters[0].term;
            var columnPriority = grid.columns[5].filters[0].term;
            var columnSeverity = grid.columns[6].filters[0].term;
            var columnStatus = grid.columns[7].filters[0].term;
            var columnCreatedDate = grid.columns[8].filters[0].term;
            var columnModifiedDate = grid.columns[9].filters[0].term;

            // Create request for selectable filters
            var query = [];
            var string;
            function request (id, param) {

                if(param === "title==" || param === "description=="){
                    query.push(param + "*" + id + "*")
                } else {
                    query.push(param + id);
                }

                if (query.length <= 1){
                    return query
                } else {
                    string = query.join(";");
                    return string;
                }
            }

            // Define behavior for cancel filtering
            $scope.isfilterclear = true;

            angular.forEach(columns, function( col ) {
                if(col.filters[0].term){
                    $scope.isfilterclear = false;
                }
            });
            if($scope.isfilterclear) {
                $timeout(function() {
                    $rootScope.refresh()
                },500);
            }

            // Filter behavior for columns
            if($scope.columnTitle) {
                $scope.$watch('columnTitle', function (newVal, oldVal) {
                    // filterOptions.filterParam = 'title==*' + newVal + "*";
                    filterOptions.filterParam =  request(newVal, 'title==*');
                }, true);
                getData()
            }
            if($scope.columnDesc) {
                $scope.$watch('columnDesc', function (newVal, oldVal) {
                    // filterOptions.filterParam = 'description==*' + newVal + "*";
                    filterOptions.filterParam =  request(newVal, 'description==');
                }, true);
                getData()
            }
            if(columnType) {
                filterOptions.filterParam = request(columnType, 'eventTypeId==');
                getData();
            }
            if(columnStudy) {
                filterOptions.filterParam = request(columnStudy, 'studyId==');
                getData();
            }
            if(columnPriority) {
                filterOptions.filterParam = request(columnPriority, 'priorityId==');
                getData();
            }
            if(columnSeverity) {
                filterOptions.filterParam = request(columnSeverity, 'severityId==');
                getData();
            }
            if(columnStatus) {
                filterOptions.filterParam = request(columnStatus, 'statusId==');
                getData();
            }
            if(columnCreatedDate){
                filterOptions.filterParam = request($rootScope.setFilterDate, 'occuredDate>=');
                getData()
            }
            if(columnModifiedDate){
                filterOptions.filterParam = request($rootScope.setFilterDate, 'occuredDate>=');
                getData()
            }


        });

1 个答案:

答案 0 :(得分:1)

您在每个列过滤器中调用getData(),这就是您的请求触发两次或更多次的原因。取出你的功能:

 // Filter behavior for columns
                if($scope.columnTitle) {
                    $scope.$watch('columnTitle', function (newVal, oldVal) {
                        filterOptions.filterParam =  request(newVal, 'title==*');
                    }, true);
                }
                if($scope.columnDesc) {
                    $scope.$watch('columnDesc', function (newVal, oldVal) {
                        filterOptions.filterParam =  request(newVal, 'description==');
                    }, true);
                }
                if(columnType) {
                    filterOptions.filterParam = request(columnType, 'eventTypeId==');
                }
                if(columnStudy) {
                    filterOptions.filterParam = request(columnStudy, 'studyId==');
                }
                if(columnPriority) {
                    filterOptions.filterParam = request(columnPriority, 'priorityId==');
                }
                if(columnSeverity) {
                    filterOptions.filterParam = request(columnSeverity, 'severityId==');
                }
                if(columnStatus) {
                    filterOptions.filterParam = request(columnStatus, 'statusId==');
                }
                if(columnCreatedDate){
                    filterOptions.filterParam = request($rootScope.setFilterDate, 'occuredDate>=');
                }
                if(columnModifiedDate){
                    filterOptions.filterParam = request($rootScope.setFilterDate, 'occuredDate>=');
                }

                getData();