Я новичок в угловой, так что извините, если это очень простой вопрос.Угловая заправка одной колонки на основе ответа сервера
Я построил клиент-серверное приложение, которое позволяет загружать файлы, а затем проверяет их (некоторые внутренние правила) и возвращает файл журнала в случае неудачной проверки.
Я использую модуль Angular File Upload для клиентской стороны, пример simple.
Ответ от сервера выглядит следующим образом (JSON)
{"status":"FAILED","entity":"download/logs/24f307d3-8964-4a5b-8d66-0763503892b1/","errors":[]}
То, что я хочу сделать, это загрузить ссылку загрузки (от response.entity) для каждого файла.
Что я получаю такое же соединение для всех файлов (один из последнего файла)
Когда я проверяю, что происходит в режиме отладки (F12) Я вижу, что параметры меняются, но как-то они в настоящее время переопределяется последним.
Я думаю, что мне нужно как-то использовать ng-repeat, но дело в том, что оно уже используется для других столбцов.
Пожалуйста, помогите.
MY HTML таблицы:
<table class="table">
<thead>
<tr>
<th width="50%">Name</th>
<th ng-show="uploader.isHTML5">Size</th>
<th ng-show="uploader.isHTML5">Progress</th>
<th>Status</th>
<th align="justify">Actions</th>
<th>Valid</th>
<th>Log</th>
</tr>
</thead>
<tbody>
<tr ng-repeat="item in uploader.queue">
<td>{{ item.file.name }}</td>
<td ng-show="uploader.isHTML5" nowrap>{{ item.file.size/1024/1024|number:2 }} MB</td>
<td ng-show="uploader.isHTML5">
<div class="progress" style="margin-bottom: 0;">
<div class="progress-bar" role="progressbar" ng-style="{ 'width': item.progress + '%' }"></div>
</div>
</td>
<td class="text-center">
<span ng-show="item.isSuccess"><i class="glyphicon glyphicon-ok"></i></span>
<span ng-show="item.isCancel"><i class="glyphicon glyphicon-ban-circle"></i></span>
<span ng-show="item.isError"><i class="glyphicon glyphicon-remove"></i></span>
</td>
<td nowrap>
<button type="button" class="btn btn-success btn-xs" ng-click="item.upload()" ng-disabled="item.isReady || item.isUploading || item.isSuccess">
<span class="glyphicon glyphicon-upload"></span> Upload
</button>
<button type="button" class="btn btn-warning btn-xs" ng-click="item.cancel()" ng-disabled="!item.isUploading">
<span class="glyphicon glyphicon-ban-circle"></span> Cancel
</button>
<button type="button" class="btn btn-danger btn-xs" ng-click="item.remove()">
<span class="glyphicon glyphicon-trash"></span> Remove
</button>
</td>
<td ng-show="item.isSuccess">
{{this.uploader.validationStatus }}
</td>
<td ng-show="uploader.showLog">
<a href={{this.uploader.logURL}} target="_blank">Log</a>
</td>
</tr>
</tbody>
</table>
Я говорю о 2 последних столбцов:
<td ng-show="item.isSuccess">
{{this.uploader.validationStatus }}
</td>
<td ng-show="uploader.showLog">
<a href={{this.uploader.logURL}} target="_blank">Log</a>
</td>
я сделал следующие изменения в файле controller.js:
uploader.onCompleteItem = function(fileItem, response, status, headers) {
console.info('onCompleteItem', fileItem, response, status, headers);
var resp = JSON.stringify(response.entity);
if (resp == "\"Success\"") {
this.validationStatus = "Yes";
this.showLog = false;
} else {
this.validationStatus = "No";
this.logURL = resp.replace(/\"/g, "");
this.showLog = true;
}
Решение:
изменения в controllers.js файле:
uploader.onCompleteItem = function(fileItem, response, status, headers) {
console.info('onCompleteItem', fileItem, response, status, headers);
if (response.status === 'FAILED') {
fileItem.validationStatus = "No";
fileItem.logUrl = response.entity;
fileItem.showLog = true;
} else {
fileItem.validationStatus = "Yes";
fileItem.showLog = false;
}
};
Изменения в HTML файле:
<td ng-show="item.isSuccess" ng-class="{green: item.validationStatus == 'Yes', red: item.validationStatus == 'No'}">
{{item.validationStatus}}
</td>
<td ng-show="item.showLog">
<a href={{item.logUrl}} target="_blank">Log</a>
</td>
Спасибо за ваш вопрос. Не могли бы вы помочь мне с примером? Где я помещаю этот объект дикоциатора? Нужен ли мне отдельный контроль? – Vika
Я отредактирую ответ –
Спасибо, Игорь. По какой-то причине он все еще не работает. Попытайтесь понять это. – Vika