angular之Http服务
原文
https://www.jianshu.com/p/53e4a4bfad7d
大纲
1、什么是angular服务
2、服务的类别
3、认识angular的Http请求
4、简单实例
5、angular的http模块
6、angular官网的英雄编辑器的服务代码
7、angular代码资源
什么是angular服务
在Angular中,我们所说的服务是指那些能够被其它的组件或者指令调用的单一的,可共享的代码块.服务能够使我们提高代码的利用率,方便组件之间共享数据和方法,方便测试和维护。
服务是一个广义范畴,包括:值、函数、或应用所需的特性
几乎任何东西都可以是一个服务,典型的服务是一个类,具有专注的、明确的用途,它应该做一件特定的事情,并把它做好。
服务无处不在。
组件类应保持精简。组件本事不从服务器获得数据,不进行验证输入,也不直接往控制台写日志。它们把这些任务委托给服务
组件的任务就是提供用户体验,仅此而已。它介于视图(由模板渲染)和应用逻辑(通常包括模型的某些概念)之间。设计良好的组件为数据绑定提供属性和方法,把其它琐事都委托给服务。
服务的类别
服务有很多类别:日志服务、数据服务、消息总线、税款计算器、应用程序配置。
认识angular的Http请求
angular的http是基于浏览器的“新特性” Fetch API 而产生的,Fetch API 和以前的 xmlhttprequest 主要功能是一样的,就是发请求.不同的地方是Fetch 是基于 promise 的,而且可以配合 service worker, stream, cache 之类的 "新特性"。
简单实例
/*
testHttp.component.ts
通过http的get请求获取本地数据
*/ import 'rxjs/add/operator/map';
import { Component, OnInit } from '@angular/core';
import { Http } from '@angular/http';
@Component({
selector: 'test-http',
templateUrl: './testHttp.component.html',
})
export class TestHttpComponent implements OnInit {
public mobiles: any[];
constructor(public http: Http) {
console.log('AppComponent constructor :', 'run step constructor ');
/**
需要注意的是这里的请求文件的路径需要正确,
所以一般都会有在公有文件中定义一个baseUrl从而来定位当前的文件位置,
进而再获取文件从而获取数据。
*/
http.get('../app/page/test/testHttp.json').subscribe(res=>
this.mobiles =res.json()
);
}
ngOnInit() {
console.log('AppComponent ngOnInit :', 'run step ngOnInit ');
}
}
<!--
testHttp.component.html
-->
<h1>Angular 2 App</h1>
<ul *ngIf="mobiles">
<li *ngFor="let m of mobiles"><span>{{m.id}}</span> {{m.name}}</li>
</ul>
angular的http模块
HttpModule并不是Angular的核心模块。 它是Angular用来进行Web访问的一种可选方式,并位于一个名叫@angular/http的独立附属模块中,因此需要在app.module.ts中引入关于http的模块。
import { HttpModule, JsonpModule } from '@angular/http'; @NgModule({
imports: [
HttpModule,
JsonpModule
],
})
angular官网的英雄编辑器的服务代码
/*
hero.ts
*/
export class Hero {
id: number;
name: string;
}
/*
hero.data.ts
*/
import {Hero} from "./hero";
export const HEROS: Hero[] = [
{id: 1, name: 'Hero1'},
{id: 2, name: 'Hero2'},
{id: 3, name: 'Hero3'},
{id: 4, name: 'Hero4'},
{id: 5, name: 'Hero5'},
{id: 6, name: 'Hero6'},
{id: 7, name: 'Hero7'},
{id: 8, name: 'Hero8'}
];
/*
hero.service.ts
*/
import { Injectable } from '@angular/core';
import {Hero} from "./hero";
import {HEROS} from "./hero.data"; @Injectable()
export class HeroService {
getHeros(): Promise<Hero[]> {
return Promise.resolve(HEROS);
}
getMockHeros(): Promise<Hero[]> {
return new Promise(resolve => setTimeout(resolve(HEROS), 2000))
.then(() => this.getHeros());
}
}
/*
app.component.html
*/
import {Component, OnInit} from '@angular/core';
import {Hero} from "./User";
import {HeroService} from "./special-user.service";
/*
* 别忘记了使用@前缀
* 这里相当于组件视图
*/
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
})
/*
* 导出这个组件,也就是一个类
* 这里相当于组件控制器
*/
export class AppComponent implements OnInit{
heros: Hero[];
constructor(
private heroService: HeroService
){}
ngOnInit() {
this.getHeroInfo();
}
public getHeroInfo () {
this.heroService.getHeros().then(heros => {
console.log(heros);
this.heros = heros
})
}
}
/*
app.component.html
*/
<ul>
<li *ngFor="let hero of heros">{{hero.name}}</li>
</ul>
代码资源
angular实例代码中的angular-service,该项目中包含了angular服务的简单实例,也包含了angular英雄编辑器的请求服务的代码,还有我自己根据所学知识写的http服务请求数据的代码,希望能对读者有所帮助。
angular之Http服务的更多相关文章
- 介绍Angular的注入服务
其实angular的注入服务是挺复杂的,目前看源码也只看懂了一半,为了不误导大家,我也不讲敢讲太复杂,怕自己都理解错了. 首先我们要知道angular的三种注入方式: 第一种:inference va ...
- Angular.js之服务与自定义服务学习笔记
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- angular访问后台服务及监控会话超时的封装
angular访问后台服务及监控会话超时的封装 angular本身自带访问组件http和httpclient,组件本身都是异步模式访问.本文只列举了对http组件的封装同时也一同处理会话超时监控. 获 ...
- angular中的服务
angular中的服务 angular中的服务相当于一个状态管理,可以将数据放在服务里面进行获取以及编辑. 服务的安装命令: ng g service count 安装好后,会在服务的ts文件中引入一 ...
- angular的uiRouter服务学习(4)
本篇接着上一篇angular的uiRouter服务学习(3)继续讲解uiRouter的用法 本篇主要讲解uiRouter的url路由 大多数情况下,状态是和url相关联的: 当url改变,激活对应的状 ...
- angular的uiRouter服务学习(3)
本篇接着上一篇 angular的uiRouter服务学习(2) 继续讲解uiRouter的用法 本篇主要讲解uiRouter的多个命名的视图 我们可以给ui-view元素添加ui-view的值来给它命 ...
- angular的uiRouter服务学习(2)
本篇接着上一篇 angular的uiRouter服务学习(1) 继续讲解uiRouter的用法 本篇主要讲解uiRouter的嵌套状态&嵌套视图 嵌套状态的方法: 状态和状态之间可以互相嵌套, ...
- $anchorScroll angular锚点服务
angular锚点服务 $anchorScroll 普通的html页面中,我们会通过在url后面添加#elementId的方式,将页面显示定位到某个元素上,也就是所谓的锚点. 但是在angular应用 ...
- angular的$filter服务
首先,介绍下$filter服务: 1.$filter是用来进行数据格式化的专用服务: 2.AngularJS内置了currency.date.filter.json.limitTo.lowercase ...
- -_-#【Angular】定义服务
AngularJS学习笔记 <!DOCTYPE html> <html ng-app="Demo"> <head> <meta chars ...
随机推荐
- asp.net core系列 39 Razor 介绍与详细示例
原文:asp.net core系列 39 Razor 介绍与详细示例 一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor ...
- Dos图像复制成序列
rem 输入1.png,在当前文件下复制.0000.png--0002.png rem 注:way2是不等待0001.png运行完就開始运行下一个了. rem 假设要等待上一个运行完后,再往下顺弃运行 ...
- 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话(初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数)
最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) ...
- js24---工厂模式2
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...
- eclipse4.3怎么集成jadclipse追踪源代码,现在windows-preferences-java
A.将net.sf.jadclipse_3.2.4.jar复制到D:\leaf\eclipse\plugins目录下. B.在d:\leaf下建立ecliplsePlungin\jadclips ...
- Nginx日志优化
一 日志轮训切割 [root@centos7 tools]# cat nginx_log.sh #!/bin/bash cd /var/log/nginx/ &&\ /bin/mv a ...
- 【CS Round #43 B】Rectangle Partition
[链接]https://csacademy.com/contest/round-43/task/rectangle-partition/ [题意] 水题 [题解] 横着过去,把相邻的边的宽记录下来. ...
- amazeui学习笔记--css(常用组件3)--按钮组Button-group
amazeui学习笔记--css(常用组件3)--按钮组Button-group 一.总结 1.按钮组用法:把一系列要使用的 .am-btn 按钮放入 .am-btn-group . 2.按钮工具栏: ...
- 11.5 Android显示系统框架_Vsync机制_黄油计划_三个方法改进显示系统
5. Vsync机制5.1 黄油计划_三个方法改进显示系统vsync, triple buffering, vsync虚拟化 参考文档:林学森 <深入理解Android内核设计思想>第2版 ...
- 基于StringUtils工具类的常用方法介绍(必看篇)
前言:工作中看到项目组里的大牛写代码大量的用到了StringUtils工具类来做字符串的操作,便学习整理了一下,方便查阅. isEmpty(String str) 是否为空,空格字符为false is ...