Можете ли вы назначить данные внутри метода GET внешней переменной в Angular 8? - PullRequest
0 голосов
/ 22 апреля 2020

В приведенном ниже коде я пытаюсь присвоить содержимое testdata значениям в checkList. Проблема, которую я получаю, состоит в том, что контрольный список не определен, когда начинается l oop. Я не могу понять, как решить эту проблему, кажется, что независимо от того, что я делаю, либо checkList, либо testdata не определены.

Я новичок ie с Angular, и мне интересно, имеет ли это какое-то отношение к свойствам asyn c метода get?

  masterSelect: Boolean;
  checkList: any;
  fileNames$: any;
  testdata: string[];

  constructor(private http: HttpClient) { 
    this.checkList = [
      {id:1,value:'Section1',isSelected:false},
      {id:2,value:'Section2',isSelected:false},
      {id:3,value:'Section3',isSelected:false},
      {id:4,value:'Section4',isSelected:false},
      {id:5,value:'Section5',isSelected:false},
      {id:6,value:'Section6',isSelected:false},
      {id:7,value:'Section7',isSelected:false},
    ]

    this.fileNames$ = this.http.get<any>(this.baseUrl + "Invoice/GetFileNames").subscribe(function (data) {

      this.testdata = data;
      for (let i = 0; i < this.testdata.length; i++) {
        //console.log(this.testdata[i])
        this.checkList[i].value = this.testdata[i];

      }

    }, function (error) {
      this.testdata = error;
    });

    this.masterSelect = false;

  }

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Я думаю, вы можете перенести контрольный список в подписку. Мое решение:

constructor(private http: HttpClient) {

this.fileNames$ = this.http.get<any>(this.baseUrl + "Invoice/GetFileNames").subscribe(function (data) { 
this.checkList = [
  {id:1,value:'Section1',isSelected:false},
  {id:2,value:'Section2',isSelected:false},
  {id:3,value:'Section3',isSelected:false},
  {id:4,value:'Section4',isSelected:false},
  {id:5,value:'Section5',isSelected:false},
  {id:6,value:'Section6',isSelected:false},
  {id:7,value:'Section7',isSelected:false},
]

  this.testdata = data;
  for (let i = 0; i < this.testdata.length; i++) {
    //console.log(this.testdata[i])
    this.checkList[i].value = this.testdata[i];

  }

}, function (error) {
  this.testdata = error;
});

this.masterSelect = false;

}

0 голосов
/ 22 апреля 2020

Попробуйте присвоить пустые значения массивам, прежде чем использовать их, как указано ниже -

  this.checkList = [];
  this.checkList = [
  {id:1,value:'Section1',isSelected:false},
  {id:2,value:'Section2',isSelected:false},
  {id:3,value:'Section3',isSelected:false},
  {id:4,value:'Section4',isSelected:false},
  {id:5,value:'Section5',isSelected:false},
  {id:6,value:'Section6',isSelected:false},
  {id:7,value:'Section7',isSelected:false},
]

То же самое и для тестовых данных -

this.fileNames$ = this.http.get<any>(this.baseUrl + "Invoice/GetFileNames").subscribe(function (data) {
  this.testdata = []
  this.testdata = data;

Более того, этот тип кода следует переместить в ngOnInit, а не в конструктор. Переменная может быть недоступна в тот момент, когда вы пытаетесь получить к ней доступ.

...