Данные перезаписываются на новых записях Ionic 4 - PullRequest
0 голосов
/ 25 сентября 2019

Итак, в основном я пытаюсь получить карточку с отчетами и делаю запрос данных по каждому предмету, который есть у студента.К сожалению, все поля заменяются, а не остаются прежними.Я могу подумать, что это какое-то ионное ограничение, поэтому, пожалуйста, любите понимать, что я делаю неправильно, и как добиться того, что я пытаюсь сделать.

Поставщик:

  tipos(data) {
    return new Promise((resolve, reject) => {
        let headers = new HttpHeaders();
        headers.append('Content-Type', 'application/x-www-form-urlencoded');
        let params: HttpParams = this.serialize(data);
        this.http.post('https://xyz.ec/app/app/tipos', params, { headers: headers })
          .subscribe(res => {
            //console.log(res);
            resolve(JSON.parse(JSON.stringify(res)));
          }, (err) => {
            reject(err);
          });
    });
  }

  actividades_det(data) {
    return new Promise((resolve, reject) => {
        let headers = new HttpHeaders();
        headers.append('Content-Type', 'application/x-www-form-urlencoded');
        let params: HttpParams = this.serialize(data);
        this.http.post('https://xyz.ec/app/app/actividades-detalle', params, { headers: headers })
          .subscribe(res => {
            //console.log(res);
            resolve(JSON.parse(JSON.stringify(res)));
          }, (err) => {
            reject(err);
          });
    });
  }

TS Файл:

export class NotasIndPage {

  data: any = { uid: '' };
  mdata: any = {uid:'',idm: '' };
  pdata: any = {idpa:'' };
  matdata: any = { uid:'',idm: '',idp:'' };
  tipdata: any = { uid:'',idm: '',idpe:'',idpa:'',idt:'' };
  tipos: any =[];
  items: any =[];
  mat: any =[];
  par: any =[];
  submitted = false;
  toast: any;
  uid: any;
  id: any;
  idpe: any;
  idpa: any;
  mnombre: any;
  pnombre: any;


  constructor(
    public userData: UserData,
    public router: Router,
    public toastController: ToastController,
    private storage: Storage,
    public route: ActivatedRoute) {

     }


  ionViewWillEnter() {
    this.storage.get('sess').then((val) => {
    if(val){
        this.data.uid=val;
        this.uid=val;

        this.route.params.subscribe(params => {
        this.id = params['idm'];
        this.idpe = params['idpe']; 
        this.idpa = params['idpa'];         
        });

        this.matdata.idm=this.id;
        this.mdata.idm=this.id;
        this.mdata.uid=this.uid;
        this.pdata.idpa=this.idpa;

         this.userData.parcial(this.pdata).then(datpa => {this.par = datpa; this.pnombre=this.par[0].nombre;});
         this.userData.materia(this.mdata).then(datma => {this.mat = datma; this.mnombre=this.mat[0].nombre;});

        //Bloque de carga de datos en formulario
          this.userData.tipos(this.data)
            .then(dat => {

              this.tipos = dat;

              for(let i=0;i<this.tipos.length;i++){

                 this.tipdata.uid=this.uid;
                 this.tipdata.idm=this.id;
                 this.tipdata.idpe=this.idpe;
                 this.tipdata.idpa=this.idpa;
                 this.tipdata.idt=dat[i].id_tipo;

                 console.log(this.uid+" - "+this.id+" - "+this.idpe+" - "+this.idpa+" - "+dat[i].id_tipo);

                 this.userData.actividades_det(this.tipdata).then(datt => {this.items = datt; console.log(datt);});

              }

            });


        //Fin de bloque de carga de datos
    }else{
    this.router.navigateByUrl('/login');
    }
    });
  }

HTML-файл:

<ion-card *ngFor="let tipo of tipos" >
  <ion-card-header>
    <ion-card-subtitle>Id: {{tipo.id_tipo}} </ion-card-subtitle>
    <ion-card-title>{{tipo.nombre}}</ion-card-title>
  </ion-card-header>

  <ion-card-content>
   <ng-container *ngFor="let item of items" ><ion-label class="under" *ngIf="item.id_actividad!=0" >  {{item.nombre}}  - {{item.nota}} : {{item.descripcion}}<br></ion-label></ng-container>

  </ion-card-content>
</ion-card>

Изображение схемы отчета

1 Ответ

0 голосов
/ 25 сентября 2019

Проблема при обновлении this.items.Вы находитесь в цикле for, поэтому каждое значение будет стирать последнее значение.Решением может быть добавление свойства к tipos таким образом:

this.userData.tipos(this.data)
        .then(dat => {

          this.tipos = dat;

          for(let i=0;i<this.tipos.length;i++){

             // ...

             this.userData.actividades_det(this.tipdata).then(datt => {this.tipos[i].items = datt; console.log(datt);});

          }

        });

, а затем использование его в html:

<ng-container *ngFor="let item of tipo.items" ><ion-label class="under" *ngIf="item.id_actividad!=0" >  {{item.nombre}}  - {{item.nota}} : {{item.descripcion}}<br></ion-label></ng-container>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...