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的输入框在光标位置插入内容, 并选中
Oct 29 Javascript
javascript中将Object转换为String函数代码 (json str)
Apr 29 Javascript
js控制table合并具体实现
Feb 20 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
Jan 06 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 jQuery
vue 项目常用加载器及配置详解
Jan 22 Javascript
VUE重点问题总结
Mar 19 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
May 07 Javascript
微信小程序防止多次点击跳转和防止表单组件输入内容多次验证功能(函数防抖)
Sep 19 Javascript
JS实现简易贪吃蛇游戏
Aug 24 Javascript
小程序角标的添加及绑定购物车数量进行实时更新的实现代码
Dec 07 Javascript
React + Threejs + Swiper 实现全景图效果的完整代码
Jun 28 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
php下目前为目最全的CURL中文说明
2010/08/01 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
Laravel中unique和exists验证规则的优化详解
2018/01/28 PHP
Prototype源码浅析 String部分(一)之有关indexOf优化
2012/01/15 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
JQuery实现动态表格点击按钮表格增加一行
2014/08/24 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
Javascript如何判断数据类型和数组类型
2016/06/22 Javascript
Nodejs+Socket.io实现通讯实例代码
2017/02/13 NodeJs
Ajax异步获取html数据中包含js方法无效的解决方法
2017/02/20 Javascript
谈谈vue中mixin的一点理解
2017/12/12 Javascript
微信小程序slider组件使用详解
2018/01/31 Javascript
详解webpack2异步加载套路
2018/09/14 Javascript
Python发送Email方法实例
2014/08/21 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Python正则表达式非贪婪、多行匹配功能示例
2017/08/08 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
python3正则提取字符串里的中文实例
2019/01/31 Python
python 实现读取一个excel多个sheet表并合并的方法
2019/02/12 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python库skimage给灰度图像染色的方法示例
2020/04/27 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
小学教师办公室制度
2014/02/03 职场文书
期终自我鉴定
2014/02/17 职场文书
资源环境与城乡规划管理专业自荐书
2014/09/26 职场文书
心理健康教育培训研修感言
2015/11/18 职场文书
网络安全倡议书(3篇)
2019/09/18 职场文书
了解Redis常见应用场景
2021/06/23 Redis
Redis入门教程详解
2021/08/30 Redis
详解Python flask的前后端交互
2022/03/31 Python
java.util.NoSuchElementException原因及两种解决方法
2022/06/28 Java/Android