Невозможно установить данные для следующей переменной после того, как я установил данные для другой переменной - PullRequest
0 голосов
/ 25 апреля 2019

Я хочу получить данные из firebase и отобразить их в форме, чтобы пользователь мог обновить информацию, которую они вводили ранее, но я могу отображать только данные для "schoolName", и все данные, которые я извлекаю из firebase, пропали , Я сделал console.log (data), чтобы проверить это, но он ничего не отображает. Какую часть моих кодов мне нужно изменить, чтобы можно было отображать данные для «schoolName» и «studentName»?

<html>
 <tbody>
  <tr id='schoolName' *ngFor="let field of Form.value.schoolName; 
  let i = index">
  <td class="text-center">
  {{i}}
  </td>
  <td>
  <input type="text" name='schoolName' placeholder='Name' class="form- 
  control"
  [(ngModel)]="field.schoolName" [ngModelOptions]="{standalone: true}" />
  </td>
  <td class="text-center">
  <button type="button" class="btn btn-sm btn-danger"                                          
  (click)="delete_school_row(field.id)">Delete</button>
   </td>
  </tr>
  <tr id='studentName' *ngFor="let field of Form.value.studentName; 
  let i = index">
  <td class="text-center">
  {{i}}
  </td>
  <td>
  <input type="text" name='studentName' placeholder='Name' class="form- 
  control"
  [(ngModel)]="field.studentName" [ngModelOptions]="{standalone: true}" />
  </td>
  <td class="text-center">
  <button type="button" class="btn btn-sm btn-danger"                                          
  (click)="delete_student_row(field.id)">Delete</button>
   </td>
  </tr>
 </tbody>
</html>

<ts>
if (this.mode == "edit") {
  this.schoolService.GetDataById(this.id).subscribe(data => 
{
this.Form.value.schoolName = [];
    if (data.schoolName) {
      for (var b = 0; b < data.schoolName.length; b++) {
        this.Form.value.schoolName= data.schoolName[b]
      }
    }
    this.Form.controls["schoolName"].setValue(data.schoolName)
console.log(data.studentName)
this.Form.value.studentName = [];
    if (data.studentName) {
      for (var b = 0; b < data.studentName.length; b++) {
        this.Form.value.studentName= data.studentName[b]
      }
    }
    this.Form.controls["studentName"].setValue(data.studentName)
});
}
</ts>

1 Ответ

0 голосов
/ 25 апреля 2019

Вы должны выдвинуть элемент в массив использовать

this.Form.value.schoolName.push(data.schoolName[b]) вместо использования this.Form.value.schoolName= data.schoolName[b]

и я не знаю точно, почему вы поместили бы предмет в this.Form.value.schoolName, вы можете выдвинуть элементы к глобальному инициированному значению в вашем файле TS, поскольку вы не используете форму в своем HTML, вы все равно сможете связать ее с любым элементом управления с помощью [(ngModel)]

Также я считаю, что использование forEach вместо for цикла в этом случае будет более удобным.

* Резюме:

let schoolNames = [], studentNames = [];
if (this.mode == "edit") {
  this.schoolService.GetDataById(this.id).subscribe(data => 
{
this.Form.value.schoolName = [];
    if (data.schoolName)            
           forEach(data.studentName, (key, value) => {
           schoolNames.push(value);
        });
    //this.Form.controls["schoolName"].setValue(data.schoolName)
console.log(data.studentName)
this.Form.value.studentName = [];
    if (data.studentName)
           forEach(data.studentName, (key, value) => {
           schoolNames.push(value);
        });
    //this.Form.controls["studentName"].setValue(data.studentName)
});
}

и установите свои циклы HTML *ngFor="let field of schoolNames

Я не знаю, помогает ли это или нет, но если нет, пожалуйста, попробуйте уточнить ваш вопрос, потому что это лучшее, что я могу предложить с предоставленной информацией.

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