我希望你能帮我这个忙。我有一个表格,可以动态添加项目到数组中,如果我们正在编辑该数组,则可以预先填充该数组,如下所示:
<mat-list class="hall-list"
*ngIf="f.halls.length">
<mat-list-item *ngFor="let hall of f.halls.controls;">
<ng-container [formGroup]="hall">
<img [src]="hall.url"
matListAvatar />
<p matLine>{{ hall.url }}</p>
<p matLine>{{ hall.startTime }}</p>
<p matLine>
<mat-form-field class="full-width-field">
<mat-label for="url">Start time *</mat-label>
<input matInput
placeholder="Enter the start time"
formControlName="startTime">
</mat-form-field>
</p>
</ng-container>
</mat-list-item>
</mat-list>
如您所见,我正在尝试显示基于“大厅” URL的图像。我将其设置如下:
ngOnInit() {
this.buildForm();
this.getHall();
}
get f() {
return this.form.controls;
}
private buildForm(): void {
this.form = this.formBuilder.group({
videoUrl: ["", Validators.required],
tags: ["", Validators.required],
halls: this.formBuilder.array([])
});
}
private getHall(): void {
this.querySubscription = this.route.queryParams.subscribe(params => {
const id = params.hallId || 0;
const halls = this.form.controls.halls as FormArray;
if (id) {
this.hallService.get(id, "Videos").subscribe(hall => {
const group = new FormGroup({
id: new FormControl(hall.id),
url: new FormControl(hall.url, Validators.required),
startTime: new FormControl("", Validators.required)
});
halls.push(group);
});
}
});
}
但是,当我查看我的页面时,尽管没有错误,但它不会显示图像。我添加了<p matLine>
尝试调试,但它们也为空。有人知道我在做什么错吗?
仅仅因为有人指出错误,所以这是总的html文件:
<form [formGroup]="form"
(ngSubmit)="save(form.value)"
novalidate>
<app-stepper #stepper>
<app-step name="Video"
[expanded]="stepper.step === 0">
<mat-form-field class="full-width-field">
<mat-label for="videoUrl">Youtube link *</mat-label>
<input matInput
placeholder="Enter a valid image url"
formControlName="videoUrl">
</mat-form-field>
<app-tags (change)="onChangeTags($event)"></app-tags>
<mat-action-row>
<button mat-raised-button
type="button"
color="primary"
(click)="getSnippet()"
[disabled]="!f.videoUrl.valid || !f.tags.valid">Next</button>
</mat-action-row>
</app-step>
<app-step name="Halls"
[expanded]="stepper.step === 1"
[disabled]="stepper.step < 1">
<p>Chanell: {{ model?.channelTitle }}</p>
<p>Title: {{ model?.title }}</p>
<mat-list class="hall-list"
*ngIf="f.halls.length">
<div formArrayName="halls">
<mat-list-item *ngFor="let hall of f.halls.controls;">
<ng-container [formGroup]="hall">
<img [src]="hall.url"
matListAvatar />
<p matLine>{{ hall.url }}</p>
<p matLine>{{ hall.startTime }}</p>
<p matLine>
<mat-form-field class="full-width-field">
<mat-label for="url">Start time *</mat-label>
<input matInput
placeholder="Enter the start time"
formControlName="startTime">
</mat-form-field>
</p>
</ng-container>
</mat-list-item>
</div>
</mat-list>
<app-image-previewer [files]="files"
[urls]="urls"
[progress]="progress"></app-image-previewer>
<mat-action-row>
<app-file [files]="files"
[urls]="urls"></app-file>
<button mat-raised-button
type="submit"
color="primary"
[disabled]="!form.valid || !f.halls.length">Save</button>
</mat-action-row>
</app-step>
</app-stepper>
</form>
这是一个显示问题的stackblitz:https ://angular6-dynamic-form-form-array-vnnye9.stackblitz.io
参考您提供的最新stackblitz代码,图像的src
值为null,您可以使用从表单组到数组级别的引用以及每个索引(例如)来设置值myForm.value.arr[i].url
。
因此
更改,
<div><img [src]="url" alt="some url" /></div>
至:
<div><img [src]="myForm.value.arr[i].url" alt="some url" /></div>
更改原因:
您正在迭代一个数组以显示一个url
没有任何值的数组,因此它提供了null。
您可以看下面的图片,
通常在这里检索我们使用的表单值,{{myForm.value | json}}
这将给出formvalue的json格式,这样使用时您需要确定url的确切位置,然后才能找到路径。
因此,在您可以使用的情况下,在这里可用myForm.value.arr[i].url
。我们需要从窗体级别的对象访问它,以数组形式包含索引,然后是该项目的url。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句