#angular
#angular
Вопрос:
У меня есть индикатор выполнения в моем приложении Angular, что я хочу сделать, так это то, что когда пользователь нажимает на комментарий к публикации, отображается прогресс, начиная со значения 0-100 (по завершении). Пока я не думаю, что то, что я реализовал, делает это, код до сих пор:
ts.file
public commentProgress = {
progress: 0
};
onSubmit() {
if (this.addCommentsForm.invalid) {
this.addCommentsForm.setErrors({ ...this.addCommentsForm.errors, 'required': true });
return;
}
let putData = Object.assign({}, this.addCommentsForm.value);
console.log('form, ', putData)
this.uploading = true;
this.commentProgress.progress = 100;
this.service.putServiceComments(putData, this.s_id).subscribe((response: any) => {
console.log("comment sent");//On success response
this.getServiceComments();
this.uploading = false;
this.commentProgress.progress = 0;
this.addCommentsForm.get('comment').reset();
}, (errorResponse: any) => {
console.log(errorResponse); //On unsuccessful response
this.error = true;
this.uploading = false;
});
}
}
HTML:
<progress *ngIf="uploading" class="progress comment-progress" [value]="commentProgress.progress" max="100"></progress>
Что делает этот код, так это просто показывает 100% прогресса, а не постепенный прогресс, поскольку вызов выполняется при отправке.
Я даже попробовал следующее, но безрезультатно, как кто-то предложил.
this.commentProgress.progress = 10 - 20 - 30 - 40 - 50 - 100;
Комментарии:
1. Вы должны сообщать о прогрессе с помощью метода putServiceComments вашего сервиса:
reportProgress: true, // observe: 'events'
проверьте этот пример из Angular HTTP: stackblitz.com/angular /…2. Можно было бы уточнить немного больше, нужно ли это в самом файле службы или в приведенной выше функции отправки
3. О прогрессе следует сообщать из вашего метода обслуживания, и, следовательно, он должен быть в файле сервиса. проверьте
uploader.service.ts
приведенный выше пример и посмотрите, как он обрабатывается
Ответ №1:
Если у вас нет информации о прогрессе службы, вы можете использовать неопределенный индикатор или подделать прогресс, бесконечно увеличивая значение до 100. Я реализовал эту функцию для ее достижения:
public commentProgress = {
progress: 0
};
private addition = 100;
private loading = true;
private addAddition() {
setTimeout(() => {
this.commentProgress.progress = this.addition / 2;
this.addition /= 2;
if (this.loading) {
this.addAddition();
} else {
this.commentProgress.progress = 0;
}
}, 1000);
}
Комментарии:
1. Нужно ли это делать в функции отправки? или ngOnit?
2. Пример кода не основан на материалах Angular, и он должен быть у вас в ngOnInit, но вы должны установить дополнение к 100 при настройке загрузки в true. Состояние загрузки по умолчанию равно false.
3. просто поместите addAddition в ngOnInit и добавьте {{commentProgress.progress}} в html и увидите волшебство