AngularJS отправить форму в случае успеха - PullRequest
0 голосов
/ 20 сентября 2019

Я использую 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&#249; di 30 secondi. &nbsp;
                        </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'));
});

Любой совет?Заранее спасибо.

...