简体   繁体   English

Angular / Typescript-另一个数组错误的对象数组

[英]Angular/Typescript - Array of Objects of another Array Error

We got an array "food/essen" which consists of 10 objects. 我们得到了一个由10个对象组成的“食物/埃森”数组。

Foodplan is an Array of 8 Objects of the Array "Food" AND an ID "Weeknumber". Foodplan是“食物”数组和ID“周数”的8个对象组成的数组。

The Problem is, that in our web-app the program does not print the details, but it recognizes its 8 objects. 问题是,在我们的网络应用程序中,该程序未打印详细信息,但可以识别其8个对象。

class Essen {
    id: number;
    name: string;
    preis: number;
    art: string;
}

class Essensplan {
    Wochennummer: number;
    EssenProWoche: number[] = new Array(5);

"essen": [
{
  "id": 11,
  "name": "Kabeljaufilet",
  "preis": 3.55,
  "art": "mit Fisch"
},

"essensplan": [
{
  "Wochennummer": 1,
   "EssenProWoche": [
    11,
    12, 
    13
  ] 
},

essensplan.service.ts essensplan.service.ts

/** GET ESSENSPLAN FROM THE SERVER */
getEssensplan(): Observable<Essensplan[]> {
    return this.http.get<Essensplan[]>(this.essensplanUrl)
        .pipe(
            tap(essensplanUrl => this.log('fetched essensplan')),
            catchError(this.handleError('getEssensplan', []))
        );
}

essensplan.component.ts essensplan.component.ts

getEssensplan(): void {
    this.essensplanService.getEssensplan()
        .subscribe(essensplan => this.essensplan = essensplan);
}

essensplan.component.html essensplan.component.html

<ul class="essensplan">
    <li *ngFor="let essensplan of essensplan">
        <span class="badge">{{essensplan.wochennummer}}</span> 
        {{essensplan.essenProWoche}}
    </li>
</ul>

The result is, that it just shows the bullet points for 8 different objects of the array, but no details. 结果是,它仅显示了阵列中8个不同对象的项目符号点,但没有详细信息。 Do you maybe know, where the error is? 您可能知道错误在哪里吗? Important is that in "fetches essensplan". 重要的是在“获取essensplan”中。

First of all, you are referencing keys starting with a lowercase letter (wochennummer, essenProWoche) within the template, while in the actual data structure contains keys starting with capital letters (Wochennummer, EssenProWoche). 首先,您要引用模板中以小写字母开头的键(wochennummer,essenProWoche),而实际数据结构中包含以大写字母开头的键(Wochennummer,EssenProWoche)。 Thats why the template doesnt know these properties. 这就是为什么模板不知道这些属性的原因。

Try to stay consistent with your property names, i suggest to use CamelCase starting with lowercase letters. 尝试与您的属性名称保持一致,我建议使用以小写字母开头的CamelCase。 But of course its your decision. 但当然是您的决定。

Another advice, look into async in order to avoid having a local var like essensplan. 另一个建议是,研究异步以避免避免像essensplan这样的本地变量。 It reduces boilerplate. 它减少了样板。

data: 数据:

"essensPlan": [{
 "wochenNummer": 1,
 "essenProWoche": [
   11,
   12, 
   13
 ], 
},//...]

controller: 控制器:

// further up define essensPlan$ as Observable<Essensplan[]>
essensPlan$ = this.essensplanService.getEssensplan();

template; 模板;

<li *ngFor="let essensPlanItem of essensPlan$ | async">
     <span class="badge">{{essensPlanItem.wochenNummer}}</span>
</li>

Furthermore I think your classes are actually interfaces; 此外,我认为您的类实际上是接口; new-ing EssenProWoche with new Array(5) is not necessary. 不需要带有新Array(5)的EssenProWoche。

<ul class="essensplan">
    <li *ngFor="let essensplan of essensplan.EssenProWoche">
        <span class="badge">{{essensplan.wochennummer}}</span>
        {{essensplan}}
    </li>
</ul>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM