Назначьте XML из http-запроса массиву - PullRequest
1 голос
/ 25 мая 2020

Я надеюсь, что ты сможешь помочь школьному учителю в беде! Я делаю HTTP-запрос к нашей школьной базе данных, и он возвращает данные как XML. Я хочу sh хранить эти данные в массиве, чтобы я мог отображать информацию о каждом ученике в приложении Angular. Код в моем student-list.component.ts:

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';

declare var require: any; // this prevents the require error for rxjs

@Component({
  selector: 'students-list',
  template: `
    <nav-bar></nav-bar>
    <h1>Students</h1>
    <hr/>
    <student-thumbnail [student] = "students"></student-thumbnail>
  `,
  styleUrls: ['./students-list.component.css'],
})
export class StudentsListComponent implements OnInit {
  constructor(private http: HttpClient) {}
  students = [1, 2, 3];

  url =
    'https://'our site';

  xmlBody = `<?xml version="1.0" encoding="utf-8" ?><Filters><MethodsToRun><Method>Pupil_GetCurrentPupils</Method></MethodsToRun></Filters>`;

  ngOnInit() {
    this.http
      .post(this.url, this.xmlBody, { responseType: 'text', observe: 'body' })
      .subscribe((findings) => {
        const xml2js = require('xml2js');

        xml2js.parseString(findings, function (err, result) {
          if (err) {
            console.log(err);
          }
          console.log(result.iSAMS.PupilManager[0].CurrentPupils[0].Pupil);
        });
      });
  }
}
в консоли я получаю следующую информацию и хочу сохранить ее в массиве студентов, чтобы иметь возможность показывать данные персоналу (имя, адрес электронной почты и c). Я пробовал присвоить значение переменной this.students в методе ngOnInit, но это не работает. Может ли кто-нибудь помочь мне с этим процессом?

enter image description here

1 Ответ

2 голосов
/ 25 мая 2020

Измените код на: -

ngOnInit() {
    this.http
      .post(this.url, this.xmlBody, { responseType: 'text', observe: 'body' })
      .subscribe((findings) => {
        const xml2js = require('xml2js');

        xml2js.parseString(findings, (err, result) => {
          if (err) {
            console.log(err);
          }
          this.students = result.iSAMS.PupilManager[0].CurrentPupils[0].Pupil;
        });
      });
  }

Это касается лексической области видимости, вместо обычной функции обратного вызова потребовалось использование стрелочной функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...