Я пытаюсь создать свое первое приложение после прохождения пары Angular онлайн-курсов, поэтому я очень к этому отношусь.
Что я пытаюсь сделать:
Я пытаюсь создать таблицу с заголовком имени приложения, а под каждым именем приложения находится список компонентов этого приложения, из которых оно состоит. Таким образом, в каждом приложении должен быть указан как минимум один компонент.
У меня есть 3 компонента:
- Основной компонент приложения (APP)
- Имя приложения (APPLICATION)
- Компонент элемента приложения ( ПУНКТЫ ПРИЛОЖЕНИЯ).
Мой план состоит в том, чтобы приложение могло вызывать API и получать список приложений (идентификатор и имя) (допустим, 3). Затем я пытаюсь вызвать другой API, который получит список элементов для этого c приложения из компонента APPLICATION ITEMS и отобразит их под этой таблицей в компоненте APPLICATION ITEMS.
Что такое проблема?
Первая часть работает, и я передаю имена приложений компоненту. В части, которая терпит неудачу, я пытаюсь вызвать 2-й API для получения элементов. Кажется, я не могу получить идентификатор, переданный от родителя для включения в вызов API.
app.component.ts
import { Component } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
appURL: string = 'http://localhost:3333/application'
appsName = []
appsID = []
constructor(private http: HttpClient) {
this.http.get(this.appURL).toPromise().then(data => {
for (let key in data){
if (data.hasOwnProperty(key)){
this.appsID.push(data[key].id)
console.log("ID = " + data[key].id)
this.appsName.push(data[key].name)
console.log("Name = " + data[key].name)
}
}
})
}
}
* Консоль возвращает :
ID = 1
Name = This Website
ID = 2
Name = Google
ID = 3
Name = My Website
applicationitems.component.ts
import { Component, Input } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Component({
selector: 'app-statuscarditems',
templateUrl: './statuscarditems.component.html',
styleUrls: ['./statuscarditems.component.css']
})
export class StatuscarditemsComponent {
@Input() appsID: number
appURL: string = 'http://localhost:3333/application/item/' + this.appsID
appItems = []
constructor(private http: HttpClient) {
// Retrieve List of Applications from the database
this.http.get(this.appURL).toPromise().then(data => {
for (let key in data){
if (data.hasOwnProperty(key)){
this.appItems.push(data[key].name)
console.log("Name = " + data[key].name)
}
}
})
}
}
URL-адрес в этом случае становится: http://localhost: 3333 / application / item / undefined
Я знаю, что мой метод неправильный, но, будучи новичком в этом, я изо всех сил пытаюсь понять, где я ошибаюсь, и это расстраивает, поскольку я знаю это должно быть легко и очевидно для меня.
Любая помощь будет принята с благодарностью. Заранее спасибо.
EDIT: app.component. html
<div class="container">
<h1 align="center">Applications and Components</h1>
<!--<app-registerapp></app-registerapp> -->
<div class="row col-sm">
<table class="table">
<tr><td *ngFor="let app of appsName"><app-statuscard [appsName]="app"></app-statuscard></td></tr>
<tr><td><app-statuscarditems></app-statuscarditems></td></tr>
</table>
</div>
</div>
(Я знаю, что еще не сделал второй * ngFor, но я я собираюсь изменить, как только смогу получить данные)