Angularjs обещание заказа скачать Excel - PullRequest
0 голосов
/ 07 апреля 2020

Я пытаюсь получить код из серверной части (java), заполнить скрытую таблицу (Angularjs) и экспортировать, как Excel, но у меня возникают проблемы, когда я выполняю свое обещание, потому что экспорт Excel перед таблицей заполните:

Angularjs

consultaService.detalleDashboard({'idBusqueda': 0,'identificador' : 0,'tipo': 0},null)
.$promise.then(function (result) {
    $scope.dataExportar = {
        data:result.item1 //I get data well
    }               
 }, function (error) {
        $log.error("** Error al obtener Info para excel", error);
}).then($scope.generaExcel()) //this 'then' execute before mi table was filled            

Просмотреть код:

<table id="headerTable">
    <tbody>
        <tr>
            <td>ID OFICINA</td>
            <td>ID SUPERVISORIA</td>                        
        </tr>                   
        <tr ng-repeat="l in dataExportar.data">
            <td>{{l.idOficina}}</td>
            <td>{{l.idSupervisoria}}</td>
        </tr>
    </tbody>
</table>

Код для экспорта Excel

$scope.generaExcel = function(){
     //export to excel file
    var tab_text = '<table border="1px" style="font-size:20px" ">';
    var textRange;
    var j = 0;
    var tab = document.getElementById('headerTable'); // id of table
    var lines = tab.rows.length;

    // the first headline of the table
    if (lines > 0) {
        tab_text = tab_text + '<tr bgcolor="#DFDFDF">' + tab.rows[0].innerHTML + '</tr>';
    }

    // table data lines, loop starting from 1
    for (j = 1 ; j < lines; j++) {
        tab_text = tab_text + "<tr>" + tab.rows[j].innerHTML + "</tr>";                                
    }

    tab_text = tab_text + "</table>";
    tab_text = tab_text.replace(/<A[^>]*>|<\/A>/g, "");          //remove if u want links in your table
    tab_text = tab_text.replace(/<img[^>]*>/gi, "");             // remove if u want images in your table
    tab_text = tab_text.replace(/<input[^>]*>|<\/input>/gi, ""); // reomves input params

    // console.log(tab_text); // aktivate so see the result (press F12 in browser)               
    var fileName = 'report.xls'                            
    var exceldata = new Blob([tab_text], { type: "application/vnd.ms-excel;charset=utf-8" }) 

    if (window.navigator.msSaveBlob) { // IE 10+
        window.navigator.msSaveOrOpenBlob(exceldata, fileName);
        //$scope.DataNullEventDetails = true;
    } else {
        var link = document.createElement('a'); //create link download file
        link.href = window.URL.createObjectURL(exceldata); // set url for link download
        link.setAttribute('download', fileName); //set attribute for link created
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
    }
}

Потому что мой файл был сгенерирован до того, как я получил это

excel fail

Просмотреть обновление хорошо (после того, как завершился бэкэнд-процесс):

View updated

ОБНОВЛЕНИЕ

Я изменил свой код, теперь он ожидает процесс бэк-офиса, тем не менее мне нужно, чтобы он ждал моей refre sh таблицы, потому что Excel генерировать до:

$scope.savePolizasVigentes = function() {               
   consultaService.detalleDashboard({'idBusqueda': 0,'identificador' : 0,'tipo': 0},null)
   .$promise.then(function (result) {
       $scope.dataExportar = {
           data: result.item1                           
       }               
    }, function (error) {
       $log.error("** Error al obtener Info para excel", error);
   }).then(function callback(response){                     
       $('#headerTable').html(response);
   }).then($scope.generaExcel)                                                                                              
}

1 Ответ

0 голосов
/ 07 апреля 2020

Не вызывать функцию:

consultaService.detalleDashboard({'idBusqueda': 0,'identificador' : 0,'tipo': 0},null)
.$promise.then(function (result) {
    $scope.dataExportar = {
        data:result.item1 //I get data well
    }               
 }, function (error) {
        $log.error("** Error al obtener Info para excel", error);
 ̶}̶)̶.̶t̶h̶e̶n̶(̶$̶s̶c̶o̶p̶e̶.̶g̶e̶n̶e̶r̶a̶E̶x̶c̶e̶l̶(̶)̶) //this 'then' execute before mi table was filled
 }).then($scope.generaExcel) 

Разрешить методу .then вызывать функцию, когда данные поступают с сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...