开发者问题收集

无法将数组的第一个值保存到对象值问​​题

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