2017-04-06 3 views
2

Dies ist mein erster Beitrag und ich möchte Sie um Hilfe zu Thema bitten, ich kann nicht scheinen, irgendwelche Informationen zu finden.Warum und wie wird das Angular2/Typescript-Modell verwendet?

Ich habe Angular 2 durch ein Handbuch und ng-Buch lernen "SpotifyApp" zu lernen, und ich stieß auf die Best Practice, um Typoskript Klassenmodell von Künstler und Album zu erstellen, importieren Sie es in meine Komponente und setzen Ergebnis von HTTP Anfrage an dieses Modell.

Jetzt sehe ich keinen Unterschied von regulären Array, ich weiß nicht, warum ich es tue, und ich kann keine relevanten Informationen zu dem Thema finden. Es funktioniert, aber ich kann nicht sehen, was es tut. Ich habe sogar versucht, es wie im Beispiel unten zu brechen es zufällige Attribute zu geben, und keinen Unterschied

Ich ging zu offiziellen Angular Docs, und ich habe keinen Unterschied zu sehen, ging durch Typoskript Tutorial auf Tutorials zeigen und nicht erwähnen irgendetwas darüber. Meine Frage ist warum ich ein Model brauche, benutze ich es falsch? Und wofür verwende ich es in der Anwendung?

artist.model.ts

import { Album } from './album.model' 
export class Artist{ 
    id: number; 
    name: number; 
    peackock: string; 
    genres: any; 
    albums: Album[]; 
} 

album.model.ts

export class Album { 
    id: number; 
} 

spotify-app.service

@Injectable() 
export class SpotifyAppService { 

    constructor(private http: Http) { 
    } 

    searchByTrack(query: string) { 
    let params: string = [ 
     `q=${query}`, 
     `type=artist` 
    ].join("&"); 

    let queryUrl = `https://api.spotify.com/v1/search?${params}`; 
    return this.http.get(queryUrl).map(res => res.json()); 
    } 

} 

Spotify-app.component.ts

export class SpotifyAppComponent implements OnInit { 
    searchStr: string; 
    artist: Artist[]; 

    constructor(private spotifyService: SpotifyAppService) { } 

    searchMusic(query: string):void{ 

    this.spotifyService.searchByTrack(query) 
     .subscribe(res => { 
     this.artist = res.artists.items; 

     }); 
    }; 
    ngOnInit() { 

    } 

} 

Antwort

1

Es ist nur ein Objekt. Und Sie haben bemerkt, dass es andere Attribute haben kann und immer noch funktioniert, weil es nachsichtig ist. Ein offensichtlicher Vorteil ist die Code-Vervollständigung und Fehlererkennung. Öffnen Sie Ihren Code in Visual Studio-Code und Sie können klicken, um seine Definition zu klicken.

Edit: Wie ich schon sagte es gibt Ihnen Code-Abschluss. So wissen Sie, wenn Sie anfangen, n zu tippen, um weiterzumachen und Namen einzugeben. Es gibt Ihnen einen Ort, um nach Attributen zu suchen, die Sie erwarten sollten. Sie können Funktionen hinzufügen. Gib es mehr Flexibilität als das, was von der API weitergegeben wird.

+0

Ich erkannte, dass es Objekt ist, aber immer noch meine Frage ist, was es tut? Und warum benutze ich es? Zuerst dachte ich, dass nur Antworten mit bestimmten Attributen darauf eingehen können, aber das ist es nicht. –

+0

@WIndWindstorm verwenden Sie das Modell b/c Sie alle Vorteile der starken Typisierung: Erkennen von Fehlern bei der Kompilierung, Code-Vervollständigung, Klarheit für Entwickler, etc. Sie verwenden es b/c Sie möchten Ihren Code strukturieren/modularisieren. Aber wenn der Typescript-Code in Javascript kompiliert wird, gehen alle starken Typisierungsregeln aus dem Fenster ... so wird das Modell zur Laufzeit nicht verhindern, dass Sie Attribute zuweisen, die nicht zur Klasse gehören. Sie könnten dem Modell Getter/Setter oder Methoden hinzufügen, um diese Dinge zu erzwingen ... –

+0

Was bedeuten die Vorteile einer starken Typisierung? Weil ich keinen Unterschied zum normalen Array sehe? Ich habe dieses Objekt gerade deklariert, ich habe es importiert und ich kann jedem Wert zuweisen, den ich möchte. Was ist der Vorteil? –

Verwandte Themen