Pido disculpas si cometí algún error. Soy nuevo en AngularJs y Stackoverflow.

Tengo una tabla con 2 filtros diferentes, el primer filtro funciona mediante la llamada api que acepta la carga útil: fromDate y toDate para filtrar datos según las fechas proporcionadas por el usuario desde la interfaz.

El segundo filtro son 2 botones que se utilizan para filtrar datos para mostrar myDatay allData. De la respuesta JSON, estoy haciendo coincidir el correo electrónico del objeto de respuesta y el correo electrónico de la persona que ha iniciado sesión actual, para identificar myData. allDataes la respuesta completa.

El problema al que me enfrento es cuando filtro mis datos usando API pasando desde y hasta la fecha, mi allDatalógica de filtrado no funciona correctamente.

código-

 <div class="card-body">
  <div id="buttonsDiv" class="mb-2">
  <button ng-disabled="currentFilterDeal==='ALL'" class="btn btn-primary mr-2" ng-click="filterTable('ALL')">All Data</button>
  <button ng-disabled="currentFilterDeal==='MY'" class="btn btn-primary mr-2" ng-click="filterTable('MY')">My Data</button>
  </div>
  <table style="width: 100%;" id="dataTable" class="table table-hover table-striped table-bordered">
  <tbody>
  <tr ng-repeat="data in finalData  track by $index">
   <td class="text-center">{{data.id}}</td>
   <td class="text-center">{{data.email}}</td>
   <td class="text-center">{{data.address}}</td>
   <td class="text-center">{{data.phoneNumber}}</td>
  </tr>
  </tbody>
  </table>
 </div>  

AngularJs-

   var app = angular.module('myApp', []);
    app.controller('formCtrl', function($scope,$window) {
  $scope.allData=[];

 $scope.getInitialData = function() {
            let dataInit= {
                "fromDate":null,
                "toDate": null
            }
            var settings = {
                "url": "//BackendUrl",
                "method": "POST",
                "headers": {
                    "Authorization": "Bearer Token",
                    "Content-Type": "application/json"
                },
                "data": JSON.stringify(dataInit),
            };
            $.ajax(settings).done(function (response) {
                $scope.allData = response.allData;
                $scope.data = [];
                //to get myData
                $scope.allData.forEach(function (element) {
                    if(element.data != null){
                        if (element.data.email== $scope.loggedInUser) {
                            $scope.data.push(element)
                        }
                        $scope.currentFilterDeal = "MY";
                    }
                })
                $scope.finalData = $scope.data;
                $scope.$apply();

                var table = $('#dataTable').DataTable({});
                table.order( [ 0, 'desc' ] ).draw();
                var requestedType ="<?=$allCallbacks;?>";

                if(requestedType === "true"){
                    $scope.filterTable('ALL');
                    $scope.$apply();
                }
            }).fail(function(err){
                console.log(err);
            });
        }
   $scope.getInitialData();

   $scope.getFilteredData = function (data2){
            let data = Object.assign({},data2)
            var setting = {
                "url": "BackendUrl/Filter",
                "method": "POST",
                "headers": {
                    "Authorization": "Bearer Token",
                    "Content-Type": "application/json"
                },
                "data": JSON.stringify(data)
            };

            $.ajax(setting).done(function (response) {
                $scope.allData = response.allData;
                $scope.data = [];
                $scope.allData.forEach(function (element) {
                    if(element.data != null){
                        if (element.data.email== $scope.loggedInUser) {
                            $scope.data.push(element)
                        }
                        $scope.currentFilterDeal = "MY";
                    }
                })
                $scope.finalData = $scope.data;
                $scope.$apply();
            }).fail(function(data){
                toastr["error"]("We could not filter your contacts.", "Contacts list not loaded!");
                $('#filterButton').attr('disabled',false).html('Filter');
            });
            $('#filterButton').attr('disabled',false).html('Filter');

        }

  $scope.filterTable = (deal) => {
            $scope.currentFilterDeal = deal;
            if(deal==='ALL') {
                $('#dataTable').DataTable().destroy();
                $scope.finalData = $scope.allData;
                console.log("all numbers list ->", $scope.fnalData); //getting correct numbers after filtering
                $('#dataTable').ready(function () {
                    var table = $('#dataTable').DataTable({});
                    table.order( [ 0, 'desc' ] ).draw();
                })
            }else if(deal==='MY'){
                $scope.data = [];
                $scope.allData.forEach(function (element) {
                    if(element.data != null){
                        if (element.data.email=== $scope.loggedInUser){
                            $scope.data.push(element)
                        }
                        $scope.currentFilterDeal = "MY";
                    }
                })
                $('#dataTable').DataTable().destroy();
                $scope.finalData = $scope.data;
                $('#dataTable').ready(function () {
                    var table = $('#dataTable').DataTable();
                    table.order( [ 0, 'desc' ] ).draw();
                })
            }
            else{}
        }
});

Problema : tengo problemas con la lógica de mostrar myData y allData después del filtrado. Mi código actual funciona perfectamente bien hasta que filtro datos usando API y obtuve una nueva respuesta JSON con más objetos json, mi filtro allData no funciona allí y muestra todos los datos solo desde la respuesta inicial.

Por ejemplo : inicialmente obtuve 3 objetos como respuesta en una matriz en la que hay 2 respuestas myDatay 1 no myData, así que lo estoy mostrando en allData. Cuando filtro dando desde la fecha y hasta la fecha obtuve 10 objects in response. Esta vez, si es 5 myData, puedo ver que en la tabla funciona bien. Pero si quiero ver todos los datos haciendo clic en el botón Todos los datos, solo puedo ver 3 datos allí, que fue la respuesta que obtuve inicialmente.

respuesta

Puede usar el filtro para filtrar los objetos de respuesta. Puede crear una función que reciba los datos y los criterios de filtrado. Si necesita todos los datos, simplemente devuelva el objeto y filtre cuando haya un criterio. Espero que esto ayude