網站搜尋

json - 巢狀介面


我嘗試了解 Angular 5/TS 中的巢狀介面,但我無法理解任何正確的要點。我創建了兩個介面:

export  interface Person {
    person: PersonData;
}

export interface PersonData {
    id: number;
    speed: number;
    weigth: number;

}

此外,我還模擬了一個 JSON 伺服器: https://www.jasonbase.com/things/VmaZ.json(見下文)。

{
  "person": [
    {
      "id": 1,
      "speed": 100,
      "weigth": 20
    },
    {
      "id": 2,
      "speed": 70,
      "weigth": 20
    },
    {
      "id": 4,
      "speed": 10,
      "weigth": 30
    }
  ]
}

問題是:

  • 我的思考方式正確嗎?
  • 如何透過 Observable Service 讀取這些資料,並讀寫像 test.person.speed 這樣的物件?

答案#1

僅使用一個介面進行簡化,一個好的範例是:

export  interface Person {
    id: number;
    speed: number;
    weigth: number;
}

在你的組件中:

import { Component } from '@angular/core';

import { Person } from './person'; // get interface
import data from './person.mock.json'; // get mock

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})

export class AppComponent {
  people: Person[] = data.person;
}

然後像這樣循環:

<ul>
  <li *ngFor="let person of people">
   id {{person.id}} | speed {{person.speed}}  | weight {{person.weigth}} 
  </li>
</ul>

工作範例:StackBlitz

答案#2

你不需要另一個介面來僅僅保存 PersonData 的引用

Person 介面看起來不必要,因為你可以簡單地創建指向 PersonData 介面的引用陣列。

let personData : PersonData[]

然後可以像 personData[i].id 或 personData[i].speed 一樣存取它們