原文

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服务的更多相关文章

  1. 介绍Angular的注入服务

    其实angular的注入服务是挺复杂的,目前看源码也只看懂了一半,为了不误导大家,我也不讲敢讲太复杂,怕自己都理解错了. 首先我们要知道angular的三种注入方式: 第一种:inference va ...

  2. Angular.js之服务与自定义服务学习笔记

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. angular访问后台服务及监控会话超时的封装

    angular访问后台服务及监控会话超时的封装 angular本身自带访问组件http和httpclient,组件本身都是异步模式访问.本文只列举了对http组件的封装同时也一同处理会话超时监控. 获 ...

  4. angular中的服务

    angular中的服务 angular中的服务相当于一个状态管理,可以将数据放在服务里面进行获取以及编辑. 服务的安装命令: ng g service count 安装好后,会在服务的ts文件中引入一 ...

  5. angular的uiRouter服务学习(4)

    本篇接着上一篇angular的uiRouter服务学习(3)继续讲解uiRouter的用法 本篇主要讲解uiRouter的url路由 大多数情况下,状态是和url相关联的: 当url改变,激活对应的状 ...

  6. angular的uiRouter服务学习(3)

    本篇接着上一篇 angular的uiRouter服务学习(2) 继续讲解uiRouter的用法 本篇主要讲解uiRouter的多个命名的视图 我们可以给ui-view元素添加ui-view的值来给它命 ...

  7. angular的uiRouter服务学习(2)

    本篇接着上一篇 angular的uiRouter服务学习(1) 继续讲解uiRouter的用法 本篇主要讲解uiRouter的嵌套状态&嵌套视图 嵌套状态的方法: 状态和状态之间可以互相嵌套, ...

  8. $anchorScroll angular锚点服务

    angular锚点服务 $anchorScroll 普通的html页面中,我们会通过在url后面添加#elementId的方式,将页面显示定位到某个元素上,也就是所谓的锚点. 但是在angular应用 ...

  9. angular的$filter服务

    首先,介绍下$filter服务: 1.$filter是用来进行数据格式化的专用服务: 2.AngularJS内置了currency.date.filter.json.limitTo.lowercase ...

  10. -_-#【Angular】定义服务

    AngularJS学习笔记 <!DOCTYPE html> <html ng-app="Demo"> <head> <meta chars ...

随机推荐

  1. asp.net core系列 39 Razor 介绍与详细示例

    原文:asp.net core系列 39 Razor 介绍与详细示例 一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor ...

  2. Dos图像复制成序列

    rem 输入1.png,在当前文件下复制.0000.png--0002.png rem 注:way2是不等待0001.png运行完就開始运行下一个了. rem 假设要等待上一个运行完后,再往下顺弃运行 ...

  3. 正确理解Widget::Widget(QWidget *parent) :QWidget(parent)这句话(初始化列表中无法直接初始化基类的数据成员,所以你需要在列表中指定基类的构造函数)

    最近有点忙,先发一篇我公众号的文章,以下是原文. /********原文********/ 最近很多学习Qt的小伙伴在我的微信公众号私信我,该如何理解下面段代码的第二行QWidget(parent) ...

  4. js24---工厂模式2

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  5. eclipse4.3怎么集成jadclipse追踪源代码,现在windows-preferences-java

      A.将net.sf.jadclipse_3.2.4.jar复制到D:\leaf\eclipse\plugins目录下.  B.在d:\leaf下建立ecliplsePlungin\jadclips ...

  6. Nginx日志优化

    一 日志轮训切割 [root@centos7 tools]# cat nginx_log.sh #!/bin/bash cd /var/log/nginx/ &&\ /bin/mv a ...

  7. 【CS Round #43 B】Rectangle Partition

    [链接]https://csacademy.com/contest/round-43/task/rectangle-partition/ [题意] 水题 [题解] 横着过去,把相邻的边的宽记录下来. ...

  8. amazeui学习笔记--css(常用组件3)--按钮组Button-group

    amazeui学习笔记--css(常用组件3)--按钮组Button-group 一.总结 1.按钮组用法:把一系列要使用的 .am-btn 按钮放入 .am-btn-group . 2.按钮工具栏: ...

  9. 11.5 Android显示系统框架_Vsync机制_黄油计划_三个方法改进显示系统

    5. Vsync机制5.1 黄油计划_三个方法改进显示系统vsync, triple buffering, vsync虚拟化 参考文档:林学森 <深入理解Android内核设计思想>第2版 ...

  10. 基于StringUtils工具类的常用方法介绍(必看篇)

    前言:工作中看到项目组里的大牛写代码大量的用到了StringUtils工具类来做字符串的操作,便学习整理了一下,方便查阅. isEmpty(String str) 是否为空,空格字符为false is ...