【问题标题】:ionic 2: marge details with same valuesionic 2:marge 具有相同值的细节
【发布时间】:2016-11-15 19:43:11
【问题描述】:

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

时间表有lecture_id的foreign_key,这意味着 讲座表:lecture_id(primary_key) +更多属性。 次表:id_lecture(foreign_key),id_time(primary_key) +更多属性。 我做了一个查询

"SELECT * from Lectures,Times where id_lecture=lecture_id";

它工作正常,给我我想要的结果。 问题是每个讲座都有一些课程,我想在同一个离子项目中显示这些课程并将其标记为一个对象。 换句话说,我想那样做。

这是我获取数据的代码

  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”

有人有办法解决吗?

【问题讨论】:

    标签: php mysql sql ionic-framework ionic2


    【解决方案1】:

    我认为您可以使用子数组按名称(或 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>
    

    【讨论】:

    • 这正是我想要做的,但我试图做 couseA[newLecture.name].push(newLecture) 但它不起作用。它显示错误“异常:无法读取未定义的属性‘push’”
    • 另外angular2中没有ng-repeat
    • 您需要先初始化子数组,然后再将对象推入其中if(!courseA[newLecture.name]) courseA[newLecture.name] = [ ]。我没发现你在使用 ionic2,但这与ngFor 的做法几乎相同
    • 这样,它将把新数据而不是原来的数据。它不是这样推动的。
    • 不,不会的。如果它不存在,它将创建一个数组。然后,您将能够将您的讲座推入内部,并且不会出现“例外:无法读取未定义的属性'push'”。您的代码应如下所示:if(!courseA[newLecture.name]) { courseA[newLecture.name] = [ ] } courseA[newLecture.name].push(newLecture)
    猜你喜欢
    • 1970-01-01
    • 2015-11-03
    • 1970-01-01
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多