Обновление: https://stackblitz.com/edit/angular-bbiy2h
Поскольку
let x = [];
x[0] = 'foo';
означает, что вы присваиваете свойство с именем "0".
Array.push фактически расширяет массивна один пункт.Это означает, что [0] будет не доступом к свойству, а доступом к индексу.Но это происходит только после того, как массив содержит индекс.
let x = [];
x.push('foo');
x[0] = 'bar'
изменит содержимое массива с индексом [0].
Теперь на угловое обнаружение: в первом примереэто обнаружение не будет работать.Вы используете * ngFor, который прослушивает массив и соответствующие индексы.При назначении свойства [0] он ничего не обнаружит, поскольку массив привязан, но привязки к свойству [0] нет.
Со вторым оно будет работать, поскольку массив не изменяется,но содержание одного из индексов делает.Так что угловые обновляют его привязки.
Кроме того, как написано в посте meysam faghfouri, вам нужно детально взглянуть на ответ API: он возвращает объект, содержащий свойство результатов.И только там вы получили своих пользователей.Поэтому необходимо получить доступ к списку пользователей с помощью
res.results
вместо просто
res
.
import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-randomuser',
templateUrl: './randomuser.page.html',
styleUrls: ['./randomuser.page.scss'],
})
export class RandomuserPage implements OnInit {
public randomUser: any; // Change this to "any" if only one user is used. or:
// public randomUser = []; // leave it as is and see below
constructor(private httpClient: HttpClient) { }
get_users() { // UPDATE: Give this a proper name.
this.httpClient.get("https://randomuser.me/api/?results=1")
.subscribe((res: { results: any[] }) ) => {// UPDATE: Define the structure of the data! Otherwise this just will be Object!
console.log(res);
this.randomUser = res.results[0]; // only use the first user, or
// this.randomUser = res.results; // use all entries returned by the api.
});
}
ngOnInit() {
}
}
При использовании только одного пользователя вы также можетеудалите * ngFor и привязайте к randomUser напрямую:
<ion-header>
<ion-toolbar>
<ion-title>randomuser</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<button (click)="get_users()">GET /Users</button>
<ion-list>
<ion-item>
<h2>{{randomUser.gender}}</h2>
<p>{{randomUser.email}}</p>
</ion-item>
</ion-list>
</ion-content>