Я использую Angular 17 с PrimeNg 17. Репродуктор здесь:
Мое намерение состоит в том, чтобы один или несколько предварительно выбранных файлов отображались в списке выбранных файлов. Как видите, я вызываю this.fileUpload._files.push(file) внутри ngAfterViewInit, и ожидаемый результат — наличие файла в списке файлов. Вместо этого он появляется только при нажатии «Выбрать». Я также добавил детектор изменений, но он все равно не работает.
Как я могу этого добиться?





Я вызвал detectChangesChangeDetectorRef внутри компонента FileUpload, и файл начал появляться!
ngAfterViewInit(): void {
if (this.fileUpload) {
this.fileUpload._files.push(this.file);
this.fileUpload.cd.detectChanges(); // <-changed here!
this.cdr.detectChanges();
}
}
полный код
import {
AfterViewInit,
ChangeDetectorRef,
Component,
ViewChild,
inject,
} from '@angular/core';
import { bootstrapApplication } from '@angular/platform-browser';
import 'zone.js';
import { FileUpload, FileUploadModule } from 'primeng/fileupload';
@Component({
selector: 'app-root',
standalone: true,
templateUrl: './app.html',
imports: [FileUploadModule],
})
export class App implements AfterViewInit {
cdr = inject(ChangeDetectorRef);
file = new File([''], 'filename');
@ViewChild('fileUpload') fileUpload!: FileUpload;
ngAfterViewInit(): void {
if (this.fileUpload) {
this.fileUpload._files.push(this.file);
this.fileUpload.cd.detectChanges();
this.cdr.detectChanges();
}
}
}
bootstrapApplication(App);
@codrut Никаких проблем, пожалуйста! :)
Это сработало отлично, спасибо! Я не могу проголосовать за, потому что у меня недостаточно репутации