上篇咱們使用的數據是經過mock-news.ts中的const News[] 數組直接賦給Component 組件的,這篇咱們把提供數據的部分單獨封裝成服務css
import { Injectable } from "@angular/core"; import { News } from './news'; import { NewList } from './mock-news'; @Injectable() export class NewsService { getNews() { return Promise.resolve(NewList) ; } }
裝飾器@Injectable()表明該服務會在程序啓動時候自動注入Component的組件中,後面會講解怎麼注入。html
咱們在類NewsService中增長了一個方法 getNews方法,該方法返回一個Promise 承諾,它是一種異步技術,防止頁面請求的時候線程阻塞,你能夠把它理解成,當有數據的時候,會自動推送給你,npm
import { Component, OnInit } from '@angular/core'; import { News } from './news'; import { NewList } from './mock-news'; import { NewsService } from './news.service'; @Component({ selector:'news', templateUrl:'./newslist.component.html', styleUrls:['./newslist.component.css'], providers: [NewsService] }) export class NewsListComponent implements OnInit { newlist:News[]; selectedNew:News; onSelected(n:News):void{ this.selectedNew=n; } constructor(private newsService:NewsService){}; getNews():void{ this.newsService.getNews().then(newlist=>this.newlist=newlist); } ngOnInit():void{ this.getNews(); } }
在該類中咱們作了三處修改數組
1. 導入服務NewsService,一般服務都是.service.ts後綴,約定。app
2. 在providers中增長 NewsService,異步
3. 集成 OnInit ,增長Angular2的初始化ngOnInit,主要目的是從新設置本身的屬性newlistide
4.注意構造函數constructor,服務在這裏DI進來。函數
命令行 npm start,程序能夠work了,this
咱們須要注意的幾個點,命令行
1. 服務寫好後,須要在Component中 導入到 Providers
2. 集成OnInit的時候注意 import { OnInit } from '@angular/core';
3. 注意Promise的寫法,只有返回時Promise的對象的時候,才能夠使用then 後續處理
4. 瞭解箭頭函數的使用
最終程序下載 點擊下載