无法将数组的第一个值保存到对象值问题
2020-05-21
136
我在 HTML 中有一个选项选择框。我已经设法将所选项目(在我的示例中为课程 ID)从该框发送到数组。保存到
courseDataSend
,如
['1']
或
['1','2']
。我可以
console.log()
它。
但现在我需要创建一个具有属性
id_course
的对象
sendCourse
,并且
id_course
应该从
courseDataSend
数组中获取,因此我尝试将其传递如下:
reg()
{
for(let i=0; i<this.courseDataToSend.length; i++)
{
console.log(this.courseDataToSend[i]) // It shows '1' or '1' and then '2' when options selected
this.sendCourse.id_course=this.courseDataToSend[i]
}
}
reg()
发生在单击按钮提交后。但是控制台中会出现此错误:
TypeError: Cannot set property 'id_course' of undefined
之所以使用 For 循环,是因为我想创建一次对象,将其发送到服务器,然后如果从框中选择了另一个选项 - 该对象将被新数据替换,然后再次发送到后端服务器。
我不知道该怎么办。
register.component.ts
coursesData : any = {}
courseDataToSend : Array<string> = []
sendCourse : {
'id_user': any,
'id_course': any,
}
constructor(
private _auth: AuthService,
private _courseService: CourseService,
private _router: Router,
private _flashMessage: FlashMessagesService) { }
ngOnInit() {
this._courseService.getCourses()
.subscribe(
res =>
{
this.coursesData= res['courses'];
console.log(this.coursesData)
}
)
}
reg()
{
for(let i=0; i<this.courseDataToSend.length; i++)
{
console.log(this.courseDataToSend[i]) // It shows '1' or '1' and then '2' when options selected
this.sendCourse.id_course=this.courseDataToSend[i]
}
}
register.component.html:
<div class="form-group">
<label for="registerCourses">Select your courses (additional):</label>
<select [(ngModel)]="courseDataToSend" name="courses" multiple class="form-control"
id="exampleFormControlSelect2">
<option *ngFor="let course of coursesData" [value]="course.id">{{course.name}}</option>
</select>
<small id="interestsHelp" class="form-text text-muted">To select more: hold control button and
click</small>
</div>
<div class="text-right">
<button (click)="reg()" type="submit" class="btn btn-primary"
style="margin: 15px;">Register</button>
</div>
2个回答
只需按如下方式更改 sendCourse 变量声明
sendCourse : any = {
'id_user': '',
'id_course': ''
}
doublezofficial
2020-05-21
此问题是由于在定义变量之前尝试设置对象值造成的。您需要设置整个对象:
for(let i=0; i<this.courseDataToSend.length; i++)
{
console.log(this.courseDataToSend[i]) // It shows '1' or '1' and then '2' when options selected
this.sendCourse = { id_course: this.courseDataToSend[i], id_user: undefined }
}
或者至少初始化
sendCourse
对象:
sendCourse : {
'id_user': any,
'id_course': any,
} = { id_user: undefined, id_course: undefined }
有效的 stackblitz 示例展示了未定义和 null 如何传播以及如何针对每种情况进行处理:
https://stackblitz.com/edit/angular-ivy-mkesxe?file=src%2Fapp%2Fapp.component.ts
Z. Bagley
2020-05-21