angular - 错误类型错误:无法在数字“1”上创建属性“id”。角
问题描述
我正在使用 Angular 7,我需要从客户端向服务器端发送请求。这是需要实现的客户端请求的结构。
{
"title" : "Test Title",
"user": {
"id" : 7
},
"category": {
"id" : 2
},
"description" : "test description",
"quantity" : "2"
}
这是角度的模型类。示例请求.ts
export class SampleRequest {
title: string;
user: { id: number};
category: { id: number};
description: string;
quantity: number;
}
然后我使用角度反应形式获取输入数据。用户 ID 正在通过 JWT 令牌获取,即当前登录用户的 ID。这是模板文件。示例-request.component.html
<form novalidate [formGroup]="requestForm" (ngSubmit)="onSubmit()">
<p>
<mat-form-field class="form-field-width">
<input matInput placeholder="Title" type="text" formControlName="title" name="title" required>
<mat-error *ngIf="requestForm.get('title').hasError('required')">Title is required</mat-error>
</mat-form-field>
</p>
<p>
<mat-form-field class="form-field-width">
<input matInput placeholder="Select Category" type="number" formControlName="category" name="category" required>
<mat-error *ngIf="requestForm.get('category').hasError('required')">Category is required</mat-error>
</mat-form-field>
</p>
<p>
<mat-form-field class="form-field-width">
<input matInput placeholder="Description" type="test" formControlName="description" name="description"
required>
<mat-error *ngIf="requestForm.get('description').hasError('required')">Description is required</mat-error>
</mat-form-field>
</p>
<p>
<mat-form-field class="form-field-width">
<input matInput placeholder="Quantity" type="number" formControlName="quantity" name="quantity" required>
<mat-error *ngIf="requestForm.get('quantity').hasError('required')">Quantity is required</mat-error>
<mat-error *ngIf="requestForm.get('quantity').hasError('pattern')">Please enter numbers only</mat-error>
</mat-form-field>
</p>
<button type="submit" [disabled]="requestForm.invalid" mat-raised-button color="primary">Submit</button>
</form>
这是 sample-request.component.ts 文件。
export class SampleRequestComponent implements OnInit {
requestForm: FormGroup;
sampleRequest: SampleRequest;
constructor(private fb: FormBuilder, private userService: UserService, private tokenStorage: TokenStorageService) { }
ngOnInit() {
this.requestForm = this.fb.group({
title : ['', Validators.required],
category : [''],
description: ['', Validators.required],
quantity: ['', [Validators.required, Validators.pattern]]
});
}
onSubmit() {
this.sampleRequest.title = this.requestForm.get('title').value;
this.sampleRequest.category.id = this.requestForm.get('category').value;
this.sampleRequest.user.id = this.tokenStorage.getUser().id;
this.sampleRequest.description = this.requestForm.get('description').value;
this.sampleRequest.quantity = this.requestForm.get('quantity').value;
console.log(this.sampleRequest);
this.userService.newSampleRequest(this.sampleRequest)
.subscribe(
data => {
this.isSuccessful = true;
this.isProgress = true;
},
error => {
this.isFailed = true;
this.isProgress = true;
this.errMsg = error.error.message;
}
);
}
}
而且我还收到“标题”未定义的错误。
解决方案
正如您所提到的,您正在导出的 SampleRequest 在这里是未定义的
export class SampleRequest {
title: string;
user: { id: number};
category: { id: number};
description: string;
quantity: number;
}
这是一个你需要初始化的类
sampleRequest: SampleRequest = new SampleRequest();
通过这种方式,您将在 this.sampleRequest 中获得所有示例请求属性
推荐阅读
- css - 相对于屏幕尺寸的位置
- android - 改造回调没有被触发
- mapbox - Mapbox在android中显示错误的当前位置
- html - 为什么 Bootstrap Carousel Sliders 不能工作
- javascript - 更改后如何在javascript中获取输入字段的值
- react-native - 在抽屉场景中切换选项卡后初始路线错误
- python - 使用python pandas如何做以下分析
- git - VSTS 使用本地创建的存储库
- ruby-on-rails - Rufus 调度程序与带睡眠的循环
- c# - 我正在尝试在 c# 中编写一个控制台应用程序,该应用程序使用在 tomcat 上运行的 Web 服务,以使用 xml 文件执行“PUT”方法