angular2中Http请求原理与用法详解


Posted in Javascript onJanuary 11, 2018

本文实例讲述了angular2中Http请求原理与用法。分享给大家供大家参考,具体如下:

提供HTTP服务

HttpModule并不是Angular的核心模块。 它是Angular用来进行Web访问的一种可选方式,并位于一个名叫@angular/http的独立附属模块中.

编辑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 heroes
GET api/heroes/42    // the character with id=42
GET 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数据

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),
 ]
})

导入InMemoryWebApiModule并将其加入到模块的imports数组。 InMemoryWebApiModule将Http客户端模拟的后端服务
forRoot()配置方法需要UserMemoryMockService类实例,用来向内存数据库填充数据

编辑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是一个管理异步数据流的强力方式。

现在,我们先利用toPromise方法把Observable直接转换成Promise对象

希望本文所述对大家AngularJS程序设计有所帮助。

Javascript 相关文章推荐
Jquery getJSON方法详细分析
Dec 26 Javascript
一个JS函数搞定网页标题(title)闪动效果
May 13 Javascript
jQuery中extend函数详解
Feb 13 Javascript
快速学习jQuery插件 Cookie插件使用方法
Dec 01 Javascript
js获取隐藏元素宽高的实现方法
May 19 Javascript
Javascript必知必会(四)js类型转换
Jun 08 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
Oct 15 Javascript
解决easyui日期时间框ie的兼容的问题
Mar 01 Javascript
小程序云开发实战小结
Oct 25 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 Javascript
JavaScript闭包相关知识解析
Oct 19 Javascript
一篇文章带你从零快速上手Rollup
Sep 07 Javascript
基于node下的http小爬虫的示例代码
Jan 11 #Javascript
JS脚本实现网页自动秒杀点击
Jan 11 #Javascript
Javascript网页抢红包外挂实现分享
Jan 11 #Javascript
JS写谷歌浏览器chrome的外挂实例
Jan 11 #Javascript
React 高阶组件入门介绍
Jan 11 #Javascript
基于react后端渲染模板引擎noox发布使用
Jan 11 #Javascript
Router解决跨模块下的页面跳转示例
Jan 11 #Javascript
You might like
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
PHP has encountered an Access Violation 错误的解决方法
2010/01/17 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
YII动态模型(动态表名)支持分析
2016/03/29 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
学习thinkphp5.0验证类使用方法
2017/11/16 PHP
PHP实现动态压缩js与css文件的方法
2018/05/02 PHP
php框架知识点的整理和补充
2021/03/01 PHP
jQuery EasyUI API 中文文档 - TimeSpinner时间微调器
2011/10/23 Javascript
Extjs表单常见验证小结
2014/03/07 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
2016/10/24 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
2016/12/08 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
react.js组件实现拖拽复制和可排序的示例代码
2018/08/20 Javascript
详解JavaScript中的强制类型转换
2019/04/15 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
在webstorm中配置less的方法详解
2020/09/25 Javascript
详解Python的Django框架中inclusion_tag的使用
2015/07/21 Python
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
python 表格打印代码实例解析
2019/10/12 Python
Python图像处理二值化方法实例汇总
2020/07/24 Python
canvas使用注意点总结
2013/07/19 HTML / CSS
html5表单及新增的改良元素详解
2016/06/07 HTML / CSS
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
莫斯科制造商的廉价皮大衣:Fursk
2020/06/09 全球购物
Android笔试题总结
2014/11/29 面试题
毕业生求职简历中的自我评价
2013/10/18 职场文书
学校运动会开幕演讲稿
2014/01/04 职场文书
高中生的自我评价
2014/03/04 职场文书
厨房管理计划书
2014/04/27 职场文书
大学生作弊检讨书
2014/09/11 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
大学生毕业个人总结
2015/02/15 职场文书
教你使用Python获取QQ音乐某个歌手的歌单
2022/04/03 Python