angularjs2 學習筆記(五) http服務


angular2的http服務是用於從后台程序獲取或更新數據的一種機制,通常情況我們需要將與后台交換數據的模塊做出angular服務,利用http獲取更新后台數據,angular使用http的get或put進行后台調用采用的是ajax方式,跨域問題需要單獨處理。下面來看一個例子,演示從后台web api中獲取數據並進行頁面加載。

1、由於要使用http服務,所以我們一定要在我們的web頁面需要引入<script src="node_modules/angular2/bundles/http.dev.js"></script>,這步很關鍵,我之前發生的找不到http服務的原因就在此,浪費了很多時間在此。

2、在angular入口還需引入HTTP_PROVIDERS,並注入,同時由於要使用map,subscribe等所以需要使用rxjs庫,那么就需要提前在入口程序中引入import 'rxjs/Rx',血的教訓

import {bootstrap} from 'angular2/platform/browser';

import {HTTP_PROVIDERS} from 'angular2/http';

import {myFrame} from "./frame/component/myFrame.component";

import 'rxjs/Rx';

 

bootstrap(myFrame, [ HTTP_PROVIDERS]);

3、創建服務

///<reference path="../../../node_modules/angular2/typings/browser.d.ts"/>

 

import {Injectable} from 'angular2/core';

import {Http } from 'angular2/http';

 

@Injectable()

export class channelService {

    private _carsUrl: string = "http://localhost:6611/api/Chanel";

    

constructor(private _http: Http) {

 

        }

getChannelList() {

    

    return this._http.get(this._carsUrl).map(responce => responce.json())

        

        

}

在這個服務中使用了http中的get來獲取數據,這里get的url(web api)是與我目前的anuglar應用在一個域內。作為服務我們需要申明該服務是可注入的@Injectable()

4、服務調用

///<reference path="../../../node_modules/angular2/typings/browser.d.ts"/>

import {Component} from 'angular2/core';

 

import {appService} from './../service/appsetting.service'

import {channelService} from './../service/channel.service'

import {Channel} from './../model/channel'

 

@Component({

    selector: 'topNav',

    templateUrl: '../app/frame/template/topNav.html',

    providers: [appService, channelService]

})

export class topNav {

    webTitle: string;

    

    public items: Channel[];

    

   

    constructor(private _appService: appService,private _channelService:channelService) {  

        this.getWebTitle();

        this.getChannelList();

    }

    getWebTitle() {

        this.webTitle = this._appService.AppSetting.webTitle;

    }

    getChannelList() {

         this._channelService.getChannelList().subscribe(res => { this.items=res});

    }

    

 

這里就和普通服務調用沒什么區別了,需要先import再在providers中申明,然后在構造函數中注入就行了。

這個例子中有個需要注意的是我們前端model和后端model有可能不一致,那么需要在獲取數據后再進行轉換,如果類型字段都一致那么可以直接使用,由於是json格式,系統會自動將后台model轉換為我們前端使用的model

Web api:

public class ChanelController : ApiController

    {

        // GET api/<controller>

        public IEnumerable<Chanel> Get()

        {

            return new Chanel[] { new Chanel{ ID="1", ChanelName="組織機構"},new Chanel{ ID="2",ChanelName="通知公告"} };

        }

}

注:web api 可以使用Swashbuckle 進行測試,安裝 PM> Install-Package Swashbuckle,使用時只需在路徑后加入swagger,如http://localhost:6611/swagger/ui/index

 

學習到這里了,逐步開始向實際應用轉換,中間的每一步都是血淚史。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM