Я пытаюсь привязать некоторые данные к шаблону с помощью Angular 6
, так что это ngOnInit
:
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
this.id = +params['id'];
});
let url = this.baseUrl + `/items/${this.id}`;
this.httpClient.get(url).subscribe((data : Array<any>)=> {
this.ItemToEdit = data;
});
}
Вот шаблон:
<div *ngFor="let item of ItemToEdit?.results">
<div class="col-sm-8 float-left">
<mat-form-field> <input matInput
class="form-control" placeholder="Item name"
formControlName="name" id="ItemName" value='{{ item.name }}'>
</mat-form-field>
</div>
</div>
Переменная ItemToEdit
выглядит следующим образом:
{
"results": [
{
"alias": [
"first"
],
"apps": [],
"description": "this is an item",
"id": 1,
"name": "item342"
}
]
}
Итак, проблема в том, что когда я открываю шаблон (с помощью какой-то кнопки), HTML-код, имеющий директиву ngFor, не отображается (div, имеющий ngFor, становится пустым). Я не знаю, как показать данные ... переменная ItemToEdit
имеет только одно значение (длина = 1), но так как она имеет вложенный массив с именем results
, я показываю данные через цикл for. Когда я пытаюсь сделать что-то подобное внутри машинописи:
this.loadedName = this.ItemToEdit.results[0].name;
Я получаю сообщение об ошибке ItemToEdit.results
не определено
Есть идеи?
EDIT
Обнаружил, что мой код работает, но только после обновления страницы ...
Сервер периодически возвращает ответы, подобные этим, вместо ожидаемых результатов:
{ "error": "(_mysql_exceptions.OperationalError) (2006, 'MySQL server has gone away') [SQL: 'SELECT .... }
{ "error": "(_mysql_exceptions.ProgrammingError) (2014, \"Commands out of sync; you can't run this command now\") [SQL: 'SELECT ......" }
================ РЕДАКТИРОВАТЬ 2 ===============
Я получаю исключение Mysql, потому что я делаю еще один httpRequest внутри ngOnInit, чтобы заполнить поле выбора из базы данных ....
После удаления этого запроса мой код работает нормально.