我有从数据库响应中获得的对象数组。
每个对象都有课程名称,讲座名称,班级,时间,日期。
在我的数据库中,它是一对多的关系->意味着每堂课都有很多课,所以我有课表和时间表。

时间表中有演讲者ID的Foreign_key
讲座表:story_id(primary_key)+更多属性。
时间表:id_lecture(foreign_key),id_time(primary_key)+更多属性。
我做了一个查询


  “从讲座中选择*,时间为id_lecture = lecture_id”;


它工作正常,并给我我想要的结果。
问题是每堂课都有一些课程,我想将这些课程显示在同一个离子项目中,并将其与一个对象绑定。
换句话说,我想那样做。
php - ionic 2:以相同的值填充细节-LMLPHP

那是我获取数据的代码

  this.coursesData.LoadLectures()
        .subscribe(LectureList=> {
           console.log("getLec1");
          LectureList.forEach(lecture=>{
            console.log(lecture);
          var newLecture={
                name:lecture.name,
                email:lecture.email,
                phone:lecture.phone ,
                lesson_type:lecture.lesson_type ,
                detailsHours:{'start_time':lecture.start_time,'end_time':lecture.end_time,'class':lecture.class, 'day':lecture.day},
                details:lecture.details,
                course_name:lecture.course_name
          }
            this.coursesA.push(newLecture);
            this.coursesNames.push(lecture.course_name);
            this.LecturesNames.push(lecture.name);
          });
          //this.courseSelect=this.coursesNames[0];
          this.coursesAD=this.coursesA;
          this.coursesNames = this.coursesNames.filter(function(elem, index, self) {
                  return index == self.indexOf(elem);
              })
             // console.log("co"+this.coursesA);


               this.loader.dismiss();
               //console.log(this.LecturesNames);
        // return this.coursesA;

        },err=>{
          console.log(err);
        });
  }


如您所见,newLecture包含

 var newLecture={
                name:lecture.name,
                email:lecture.email,
                phone:lecture.phone ,
                lesson_type:lecture.lesson_type ,
                detailsHours:{'start_time':lecture.start_time,'end_time':lecture.end_time,'class':lecture.class, 'day':lecture.day},
                details:lecture.details,
                course_name:lecture.course_name
          }


但是有很多课程,所以如果我这样做,那是有问题的,因为它将重复名称。

我尝试过这种方式,但显示出错误

 public Lectures(){
  console.log("getLec");
  this.courseSelect='';
  this.coursesNames=[];
  this.LecturesNames=[];
  this.coursesA=[];

 this.coursesData.LoadLectures()
    .subscribe(LectureList=> {
       console.log("getLec1");
      LectureList.forEach(lecture=>{
        console.log(lecture);
      var newLecture={
            id:lecture.id_lecture,
            name:lecture.name,
            email:lecture.email,
            phone:lecture.phone ,
            lesson_type:lecture.lesson_type ,
            detailsHours:{'start_time':lecture.start_time,'end_time':lecture.end_time,'class':lecture.class, 'day':lecture.day},
            details:lecture.details,
            course_name:lecture.course_name
      }
        console.log("de"+newLecture.detailsHours.start_time);
        if(!newLecture.id){
          this.coursesA[newLecture.id]=newLecture;
       // this.coursesNames.push(lecture.course_name);
        //this.LecturesNames.push(lecture.name);
        }
        else{
          this.coursesA[newLecture.id].push(newLecture);
        }

      });
      this.coursesAD=this.coursesA;

      //this.courseSelect=this.coursesNames[0];

      console.log(this.coursesA);
      /*this.coursesNames = this.coursesNames.filter(function(elem, index, self) {
              return index == self.indexOf(elem);
          })
           */

         // console.log("co"+this.coursesA);

           this.loader.dismiss();
           console.log("lets"+this.LecturesNames);
    // return this.coursesA;


    },err=>{
      console.log(err);
    });


}

我得到这个错误


  TypeError:无法读取未定义的属性“ push”


有人有什么办法解决吗?

最佳答案

我认为您可以使用子数组按名称(或course_name)将课程分组。除了将newLecture推入courseA内,您还可以将其推入courseA[newLecture.name]内。

因此,您将获得以下内容:

{
    "JAVA Course": [
      { lecture1 },
      { lecture2 }
    }],
    "JS Course": [
      { lecture3 },
      { lecture4 }
    }]
}


然后,您可以在模板中执行以下操作:

<ion-item ng-repeat="(key, value) in obj">
    <p>{{key}}</p> <!-- example: JAVA Course -->
    <div ng-repeat="(subkey, subvalue) in value">
        {{subvalue}} <!-- example: lecture hours -->
    </div>
</ion-item>

09-26 11:43