2017-04-06 67 views
2

这是我的第一篇文章,我想问你的主题的帮助,我似乎无法找到任何信息。为什么以及如何使用Angular2/Typescript模型?

我一直在学习Angular 2通过指南和ng-book创建“SpotifyApp”,并且我遇到了创建Artist和Album的typecript类模型的最佳实践,将它导入到我的组件并设置HTTP结果请求该模型。

现在我没有看到任何与常规数组的区别,我不知道为什么我这样做,我似乎无法找到任何有关该主题的信息。它可以工作,但我看不到它的作用。我甚至试图打破它,如下面的例子给它随机的属性,并没有区别

我去了Angular官方文档,我没有看到任何区别,没有经过在教程点的Typescript教程并没有提及关于它的一切。所以我的问题是为什么我需要模型,我用它错了吗?我在应用程序中使用它?

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() { 

    } 

} 

回答

1

这只是一个对象。你已经注意到它可以有其他的属性,并且仍然可以工作,因为它是宽容的。一个明显的好处是代码完成和错误检测。在Visual Studio代码中打开你的代码,你可以控制点击它的定义。

编辑:就像我说的它给你的代码完成。所以你的ide知道你什么时候开始输入n来继续并填写名字。它给你一个寻找你应该期望的属性的地方。 你可以添加功能做到这一点。给它更多的灵活性,只是从API传递的。

+0

我意识到它是对象,但我的问题仍然是它的作用?为什么我使用它?起初我认为只有某些属性可以传递给它,但事实并非如此。 –

+0

@WIndWindstorm使用的型号B/C你想强类型的所有优点:在编译时发现错误,代码完成,清晰度为开发商,等你用它二/三要构建/模块化代码。但是,当Typescript代码编译为Javascript时,所有强类型规则都会出现在窗口中......所以在运行时,模型不会执行阻止您分配不属于该类的属性的事情。您可以在模型中添加getters/setters或方法来帮助执行这些操作... –

+0

强类型的好处是什么意思?因为我没有看到与正常数组有什么不同?我只是宣布这个对象我导入它,我可以分配任何我想要的值。那么有什么好处? –

相关问题