Я использую AngularJS, и мне нужно изменить какой-то код, написанный другим человеком, но я не могу найти, как это сделать.
Мне нужно взять некоторые данные из формы, отправить их в функцию в NodeJs, а затем вернуть файл CSV с ответом.Я уже написал функцию, и она работает довольно хорошо, возвращая правильный CSV.
Проблема в том, что функции требуется много времени для возврата CSV, и мне нужно активировать круг загрузки счетчика во время работы функции.
Проблема в том, что я не знаю, какполучить конец функции (когда CSV возвращается обратно) для деактивации счетчика (потому что форма отправляется странным образом).Вращатель будет деактивирован с помощью
usSpinnerService.stop('spinner-1');
HTML:
<div class="row">
<div class="col-xs-8 col-xs-offset-2 ">
<div class="panel panel-default">
<div class="panel-heading text-center">
<h3>Avanzamento Valutazioni</h3>
</div>
<form name="csvForm" ng-submit="download(csvForm.$valid)">
<div class="panel-body">
<div class="row">
<div class="form-group col-sm-6 col-sm-offset-3">
<label class="control-label">Concessionaria</label>
<select class="form-control" ng-model="Dealer" ng-options="dealer.ID as dealer.Name for dealer in dealers ">
<option value="">Tutte le concessionarie</option>
</select>
</div>
</div>
<div class="row">
<div class="form-group col-sm-6 col-sm-offset-3 text-center" ng-if="!Dealer">
Se si seleziona 'Tutte le concessionarie', l'operazione potrebbe richiedere più di 30 secondi.
</div>
</div>
<span us-spinner="{radius:30, width:8, length: 16}" spinner-key="spinner-1" spinner-start-active="false">
</div>
<div class="form-group col-sm-4 col-sm-offset-4" style="margin-top:20px">
<button name="submitBtn" class="btn btn-lg btn-primary btn-block" type="submit" >Scarica CSV</button>
</div>
</form>
</div>
</div>
</div>
Функция в контроллере в AngularJS:
$scope.download = function () {
usSpinnerService.spin('spinner-1');
var form = document.createElement('form');
form.action = apihost + "/queryReport/avanzEvaluation";
form.method = 'POST';
form.target = '_self';
form.style.display = 'none';
var jsonData = {
dealer: $scope.Dealer
};
var inputJson = document.createElement('input');
inputJson.type = 'text';
inputJson.name = 'data';
inputJson.value = JSON.stringify(jsonData);
var submit = document.createElement('input');
submit.type = 'submit';
submit.id = 'submitProject';
form.appendChild(inputJson);
form.appendChild(submit);
document.body.appendChild(form);
//Send the form
form.submit();
document.body.removeChild(form);
};
Функция в узле просто взятьданные, выполнить некоторые запросы, разработать результат и отправить его обратно такого типа ответа:
router.post('/avanzEvaluation', function (req, res) {
...
...
var iconv = require('iconv-lite');
const Json2csvParser = require('json2csv').Parser;
const fields = ["Nome Opera", "Codice Opera", "Tipologia Opera", "ID Registro Ispezione", "ELEMENTI TOTALI", "ELEMENTI ISPEZIONATI", "ELEMENTI RESTITUITI", "REDATTO", "CONVALIDATO", "EMESSO"];
const opts = { fields };
const parser = new Json2csvParser(opts);
const csv = parser.parse(results);
var filename = ("avanzValutazioni.csv");
res.header("Content-Disposition","attachment;filename=" + filename);
res.setHeader('content-type', 'text/csv');
res.send(iconv.encode(csv, 'iso-8859-1'));
});
Любой совет?Заранее спасибо.