Я довольно новичок в Angular, поэтому, хотя я пытаюсь что-то сделать, я думаю, это не сложно, я застрял и нуждаюсь в вашей помощи.
Что мне нужно сделать, это заполнить HTML-таблицус данными клиентов по нажатию кнопки и после получения данных от вызова API.
Я могу отображать «фиксированные» данные с помощью ngFor, если я определяю их как открытое свойство класса TypeScript, как видно изclientsData1 (я оставляю это в качестве примера), но не могу связать ngFor с переменной, содержащей изменения результата json (clientsData).
Короче говоря, я пытаюсь сделать следующее: когда я нажимаю кнопку, я запускаю метод getItems икак только у getItems будет результат, мне нужно обновить таблицу.
Это мой класс TypeScript:
import {Component} from '@angular/core';
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/catch';
import 'rxjs/add/operator/debounceTime';
import 'rxjs/add/operator/distinctUntilChanged';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/switchMap';
import 'rxjs/add/operator/toPromise';
@Injectable()
@Component({
selector: 'demo-app',
templateUrl: 'app/views/app.component.html'
})
export class AppComponent {
public clientsData : string;
private clientsUrl : string = 'http://www.mocky.io/v2/5808862710000087232b75ac';
public clientsData1 : any = [{'id': 1}, {'id': 3}, {'id': 5}];
constructor (private http: Http) { }
ngOnInit() {
let btnGetClients = document.getElementById("btnGetClients");
btnGetClients.addEventListener("click", (e:Event) => this.getItems()
.subscribe(
ipdata => this.clientsData = ipdata.clientsJson
));
}
getItems(): Observable<IPData> {
return this.http.get(this.clientsUrl)
.map(this.extractData);
}
extractData(res: Response) {
return res.json();
}
}
class IPData {
public clientsJson : string;
}
А это HTML-шаблон:
<h1>Insurance App</h1>
<hr />
<button id="btnGetClients">Get Clients</button>
<br/><br/>
<table>
<thead>
<th>Id</th>
<th>Name</th>
<th>Email</th>
<th>Role</th>
</thead>
<tbody *ngFor="let client of clientsData">
<tr>
<td>{{client.id}}</td>
</tr>
</tbody>
</table>
Любая помощь будет высоко ценится.
Спасибо.