国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

angular2中Http請求原理與用法詳解

2019-11-19 14:32:34
字體:
供稿:網(wǎng)友

本文實(shí)例講述了angular2中Http請求原理與用法。分享給大家供大家參考,具體如下:

提供HTTP服務(wù)

HttpModule并不是Angular的核心模塊。 它是Angular用來進(jìn)行Web訪問的一種可選方式,并位于一個名叫@angular/http的獨(dú)立附屬模塊中.

編輯app.module.ts

import { HttpModule, JsonpModule } from '@angular/http';@NgModule({ imports: [  HttpModule,  JsonpModule ],})

angular-in-memory-web-api

npm install angular-in-memory-web-api --save-dev

This in-memory web api service processes an HTTP request and returns an Observable of HTTP Response object in the manner of a RESTy web api.

:base/:collectionName/:id?GET api/heroes     // all heroesGET api/heroes/42    // the character with id=42GET api/heroes?name=^j // 'j' is a regex; returns heroes whose name starting with 'j' or 'J'GET api/heroes.json/42 // ignores the ".json"

之前測試時用的app/mock/user_data_memory_mock.ts數(shù)據(jù)

import {User} from '../model/User';import { InMemoryDbService } from 'angular-in-memory-web-api';export class UserDataMemoryMock implements InMemoryDbService{ createDb() {  const users: User[] = [    new User('chenjianhua_a', 21, '2290910211@qq.com', '123456'),    new User('chenjianhua_b', 22, '2290910211@qq.com', '123456'),    new User('chenjianhua_c', 23, '2290910211@qq.com', '123456'),    new User('chenjianhua_d', 24, '2290910211@qq.com', '123456'),    new User('chenjianhua_e', 25, '2290910211@qq.com', '123456'),    new User('chenjianhua_f', 26, '2290910211@qq.com', '123456'),    ];  return {users}; }}

編輯app.module.ts

import { InMemoryWebApiModule } from 'angular-in-memory-web-api';import { UserDataMemoryMock } from './mock/user_data_memory_mock';@NgModule({ imports: [  InMemoryWebApiModule.forRoot(UserDataMemoryMock), ]})

導(dǎo)入InMemoryWebApiModule并將其加入到模塊的imports數(shù)組。 InMemoryWebApiModule將Http客戶端模擬的后端服務(wù)
forRoot()配置方法需要UserMemoryMockService類實(shí)例,用來向內(nèi)存數(shù)據(jù)庫填充數(shù)據(jù)

編輯app/service/user.restful.service.ts

import {Injectable} from '@angular/core';import { Headers, Http } from '@angular/http';import 'rxjs/add/operator/toPromise';import { User } from '../model/User';import { Logger } from './logger.service';@Injectable()export class UserService {  private USERURL = 'api/users';  private headers = new Headers({'Content-Type': 'application/json'});  constructor(private Log: Logger,  private http: Http) { }  getUserByName(name: string): Promise<User> {  const url = `${this.USERURL}/?name=${name}`;  return this.http.get(url)    .toPromise()    .then(response => response.json().data as User)    .catch(this.handleError);  }  getUsers(): Promise<User[]> {    console.log('Get User!');    return this.http.get(this.USERURL)    .toPromise()    .then(response => response.json().data as User[])    .catch(this.handleError);  }  create(name: string): Promise<User> {  return this.http    .post(this.USERURL, JSON.stringify({name: name}), {headers: this.headers})    .toPromise()    .then(res => res.json().data as User)    .catch(this.handleError);  }  private handleError(error: any): Promise<any>{    console.log('An error occurred :', error);    return Promise.reject(error.message);  }}

編輯app/components/app-loginform/app.loginform.ts

import { Component, OnInit } from '@angular/core';import { Logger } from '../../service/logger.service';import { UserService } from '../../service/user.restful.service';import { User } from '../../model/User';import { Subject } from 'rxjs/Subject';@Component({ selector: 'app-loginform', templateUrl: './app.loginform.html', styleUrls: ['./app.loginform.css'], providers: [  Logger,  UserService ]})export class AppLoginFormComponent implements OnInit {  users: User[];  submitted = false;  model = new User('1', 'fangfang', 22, '2290910211@qq.com', '123456');  constructor(    private Log: Logger,    private userService: UserService  ){}  ngOnInit(): void{    this.userService    .getUsers()    .then( users => this.users = users);  }  onSubmit(): void {    this.userService.getUserByName(this.model.name)    .then( user => {      console.log('user.name', user[0].name);      console.log('user.password', user[0].password);      if(user[0].name === this.model.name      && user[0].password === this.model.password){        this.Log.log('login success!');        this.submitted = true;      }else{        this.Log.log('login failed!');        this.submitted = false;      }    })    .catch(errorMsg => console.log(errorMsg));  }}

HTTP Promise

Angular 的http.get返回一個 RxJS 的Observable對象。 Observable是一個管理異步數(shù)據(jù)流的強(qiáng)力方式。

現(xiàn)在,我們先利用toPromise方法把Observable直接轉(zhuǎn)換成Promise對象

更多關(guān)于AngularJS相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《AngularJS指令操作技巧總結(jié)》、《AngularJS入門與進(jìn)階教程》及《AngularJS MVC架構(gòu)總結(jié)

希望本文所述對大家AngularJS程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 茂名市| 获嘉县| 贵阳市| 南郑县| 柘城县| 兴山县| 婺源县| 宁城县| 中牟县| 凯里市| 哈密市| 新平| 沙田区| 北宁市| 疏勒县| 花垣县| 无为县| 万荣县| 兴海县| 孟津县| 沙坪坝区| 鄱阳县| 博罗县| 布尔津县| 宣城市| 平舆县| 六枝特区| 惠水县| 峡江县| 汉川市| 文成县| 苏州市| 黑水县| 阆中市| 镇江市| 通山县| 龙南县| 常德市| 贞丰县| 方城县| 莒南县|