angular6之Http服务

Angular5 HttpService Angular Http封装,对Http请求处理:https://plnkr.co/edit/2Wjw8RIOUylzomHlVB0p?p=info 立即下载

在angular中我们可以将http请求封装成服务,在组件中引入该服务,
就可以实现前后端的数据请求。
具体实现:
1、ng generate service app
在app根目录下生成app.service.ts的文件,里面基本配置项已经生成。
2、引入Injectable注入模块,同时引入http模块

import { Injectable } from '@angular/core’
import { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';

@Injectable({
  providedIn: 'root'
})

加上providedIn: ‘root’,自动将服务加入到跟模块的providers中,这样该服务就可以在应用中的任何地方使用
3、构造函数中声明http的私有属性,将httpClient注入到http中

constructor (
private $http: HttpClient
){}

httpParams类可以设置请求参数

具体设置:

let params = new HttpParams();

params=params.set(key, value);

httpHeader类用来设置请求头

具体设置:

let headers = new HttpHeaders().set("Content-Type", "application/json");

http的Request方法,执行请求并返回Observable对象(类似于promise,处理异步编程的解决方案),最后直接调用Observable.subscribe方法处理结果。

例如:

this.$http.request('get', url, {params: params, headers: headers});

request方法的传参官方说明,可以针对post,get等做统一封装。
在这里插入图片描述

深入

1.修改Hero的信息

当需要修改某一个hero的名字的时候,当点击后退的时候,之前的所做的改变的信息都会小时不在,在实际应用中,这些修改都应该是被保存的,需要将修改后的信息,传输给远端的服务器,进而的正真的修改这条数据。

在hero-detail的模版文件中,增加一个save按钮,并绑定一个点击事件save()。

<button (click)=“save()”>save

实现save()方法:使用heroService中的updateHero()(稍后添加)方法来保存对某一个hero信息修改,然后导航返回之前的一个视图。

save(): void {
   this.heroService.updateHero(this.hero)
     .subscribe(() => this.goBack());
 }

添加updateHero() 方法,在项目中,在进行更新操作的时候,一般情况下发送的是put请求,所以,在这里要调用http.put()方法,注:这里的http是HttpClient的实例化的一个对象,将进行的更改保存在远端的服务器上。

updateHero (hero: Hero): Observable<any> {
  return this.http.put(this.heroesUrl, hero, httpOptions).pipe(
    tap(_ => this.log(`updated hero id=${hero.id}`)),
    catchError(this.handleError<any>('updateHero'))
  );
}

HttpClient.put() 方法接受三个参数

URL 地址

要修改的数据(这里就是修改后的英雄)

选项

一般情况,对于一系列中的其中一个事物进行修改,这个时候,可能就需要一个能唯一标示出这个事物的一个参数,常常用的是这个事物的ID,在当前的这个demo中,就可以使用每个hero的id对每个hero进行区别,从而知道具体更新的是哪一个hero。但有时候,(少数情况下)有时会会利用put方法进行新建操作(偶尔使用,不推荐)。

关于参数中的选项:option

有时在传输过程中,需要一个增加一些有特殊意思的请求头,这个时候,就可以在option中使用,就是updateHero方法中的httpOptions

在这里httpOptions:(由于这个httpOptions基本不会再进行改动,所以,用常量const 定义)

const httpOptions = {
  headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};

此时,保存刷新浏览器,修改一个hero的name,然后点击save按钮,然后在返回的导航中,就可以看到hero修改后的新name。
2.新建一个hero

每一个应用的数据不可能仅仅只能修改,当有一个新的hero来到时,这个时候,就需要将新的hero信息增加到当前的hero列表中,我们需要一个输入框,让用户通过这个输入框输入新的hero的name,并在这个输入框的前面提示“Hero Name” ,使用户意识到这个输入的框的意思是输入hero的Name,增加完输入框以后,还需要增加一个按钮,在这个按钮上添加一个点击事件,当用户点击这个按钮的时候,开始获取用户在这个输入框输入的值,并将获取的值发送给远端的服务器,是远端的服务器的到这个新增的值,并添加至相应的数据库中。
a.添加input,button等控件。

<div>
  <label>Hero name:
    <input #heroName />
  </label>
  <button (click)="add(heroName.value); heroName.value=''">
    add
  </button>
</div>

b.给button上添加点击事件add(heroName.value),当点击这个button的时候,会触发清空之前填写的数据,当用户输入了数据以后,会将这个数据转换成Hero类似的对象(缺少hero的id属性)。当保存成功以后,会将这个hero的name放入(Array.push()方法)heroes的数组中进行展示。

add(name: string): void {
    name = name.trim();
    if (!name) {
      return;
    }
    this.heroService.addHero({name} as Hero)
      .subscribe(hero => {
        this.heroes.push(hero);
      });
  }

c.在httpservice中增加一个addHero()方法,利用http.post()方法向远端服务器进行传输数据(http是HttpClient创建的一个实例)。

addHero(hero: Hero): Observable<Hero> {
    return this.http.post<Hero>(this.heroesUrl, hero, httpOptions).pipe(
      tap((hero: Hero) => this.log(`added hero w/ id=${hero.id}`)),
      catchError(this.handleError<Hero>('addHero'))
    );
  }

问题:为何此时没有id属性?

在某个一系列的事物中,这种进行事物唯一标示的操作,是来自于远端的服务器后端的分配的,新建的时候,就需要新建的信息发送给后端就可以了,然后远端服务器那边会自动给当前的数据分配一个独一无二的标示(ID)

3.删除某一个Hero

当不要这个hero的时候,就需要将这个hero进行删除,将需要删除的hero传给远端的服务器。

在每一个hero

  • 标签里增加一个删除的按钮
  • <ul class="heroes">
      <li *ngFor="let hero of heroes">
        <a routerLink="/detail/{{hero.id}}">
          <span class="badge">{{hero.id}}</span> {{hero.name}}
        </a>
        <button class="delete" title="delete hero"
          (click)="delete(hero)">x</button>
      </li>
    </ul>
    

    使用一些CSS使这个删除按钮浮动在这个

  • 的右边。
  • .delete {
      position: relative;
      left: 194px;
      top: -32px;
      background-color: gray !important;
      color: white;
    }
    

    在类文件中实现删除button中的点击事件delete(hero)方法

    delete(hero: Hero): void {
      this.heroes = this.heroes.filter(h => h !== hero);
      this.heroService.deleteHero(hero).subscribe();
    }
    

    虽然这个组件把删除hero的逻辑委托给了 HeroService,但扔保留了更新它自己的hero列表的职责。 组件的 delete() 方法会在 HeroService 对服务器的操作成功之前,先从列表中移除要删除的hero。

    组件与 heroService.delete() 返回的 Observable 还完全没有关联。必须订阅它。

    在heroService中添加delete()方法

     deleteHero(hero: Hero | number): Observable<Hero> {
        const id = typeof hero === 'number' ? hero : hero.id;
        const url = `${this.heroesUrl}/${id}`;
     
        return this.http.delete<Hero>(url, httpOptions).pipe(
          tap(_ => this.log(`deleted hero id=${id}`)),
          catchError(this.handleError<Hero>('deleteHero'))
        );
      }
    

    注意

    它调用了 HttpClient.delete。
    
    URL 就是英雄的资源 URL 加上要删除的英雄的 id。
    
    你不用像 put 和 post 中那样发送任何数据。
    
    你仍要发送 httpOptions。
    

    保存,刷新浏览器,就可以点击删除按钮,删除需要删除的hero

2.6 SST的核心性能指标体系 本文构建了固态变压器(SST)的核心性能指标体系,涵盖电气性能、可靠性、经济性和环境适配性四大类指标。电气性能指标包括运行效率(≥97%)、功率密度(≥900kVA/m³)、谐波畸变率(≤3%)等关键参数;可靠性指标设定MTBF≥43800h、年均故障率≤1.2次/年等标准;经济性指标对比分析了初始购置成本(45-55万元)和全生命周期成本(48-55万元);环境适配性指标则明确了温度、海拔等工况要求。该体系采用量化公式和国标限值,为SST的性能测试、选型和优化提供了统一标准。 阅读详情

相关推荐

STM32+EC800M-CN 4G模块数据透传踩坑实录:从AT指令调试到花生壳内网穿透

本文详细介绍了STM32与移远EC800M-CN 4G模块的数据透传实现过程,包括硬件连接、AT指令调试、TCP连接建立以及花生壳内网穿透配置。通过实战案例和代码示例,帮助开发者快速解决4G通信模块在物联网应用中的常见问题,提升数据传输稳定性。

weixin_42715608的博客 319

Angular6学习笔记12:HTTP(2)

HTTP 继学习笔记11以后,可以模拟的调用get方法,并且可以利用某一个ID去查询某一个Hero的详细信息。 1.修改Hero的信息 当需要修改某一个hero的名字的时候,当点击后退的时候,之前的所做的改变的信息都会小时不在,在实际应用中,这些修改都应该是被保存的,需要将修改后的信息,传输给远端的服务器,进而的正真的修改这条数据。 在hero-detail的模版文件中,增加一个save按...

W先生 1275

基于Arduino与Velostat的智能鞋垫:DIY足底压力监测系统全解析

压力传感器是物联网和健康监测领域的基础元件,其核心原理是将物理压力转换为可测量的电信号。通过压阻效应,材料的电阻值随压力变化,从而实现压力感知。这项技术为低成本、定制化的健康监测方案提供了可能,尤其在运动分析和康复训练中具有重要价值。本文聚焦于利用Velostat压敏材料和Arduino平台,详细解析如何从传感器制作、信号调理到无线数据传输,构建一套完整的足底压力监测系统。文中深入探讨了传感器阵列构建、信号滤波等关键技术,并针对常见问题提供了实用的解决方案,为创客和开发者实现可穿戴健康监测设备提供了清晰的工

weixin_32818781的博客 399

angular的get请求-HttpParams注意事项

点击打开链接设置查询参数假设发送 Get 请求时,需要设置对应的查询参数,预期的 URL 地址如下:https://angular-http-guide.firebaseio.com/courses.json?orderBy="$key"&amp;limitToFirst=1创建 HttpParams 对象import {HttpParams} from "@angular/common/http...

m0_37158404的博客 7300

富芮坤FR801xH蓝牙协议栈启动流程和notify实现温度数据主动上传

文章目录一、蓝牙协议栈启动流程1.1 初始化代码1.2 初始化流程1.3 回调函数里的初始化二、notify实现2.1 notify介绍2.2 notify实现2.3.1 定义数据2.3.2 获取连接号conidx2.3.3 gatt_notification函数的使用三、notify温度上传测试3.1 蓝牙调试工具3.2 蓝牙调试器设置3.3 测试结果四、参考链接   基于sdk开发的好处是方便项目的快速落地,现在用的是SDK里面的源文件,目前只是学习FR801xH芯片的特性,裁剪这个SDK需要点时间,

weixin_43810563的博客 4318

AOSP 8.0.0编译中的ANDROID_DATA缺失问题解决方案

在AOSP编译过程中,环境变量和路径设置的正确性至关重要。遇到相关的错误时,检查并修正环境配置通常是解决问题的关键。希望本文提供的分析和解决方案能帮助你顺利编译AOSP。

m0_74337424的博客 396

Angular配置http请求

Angular中配置http请求服务及请求跨域_@不喝海之言@-优快云博客_angular请求跨域 1. 在app.module.ts中引入我们http请求模块: // 引入angular的内置请求模块 import {HttpClientModule} from '@angular/common/http' 2. 在app.module.ts的模块配置中,配置我们引入的http请求模块: // 配置模块 imports: [ BrowserModule, // 请求模块 Ht

aeioumm的博客 2353

2023华为od机试C卷【最富裕的小家庭】Java&Go 实现

在一颗树中,每个节点代表一个家庭成员,节点的数字表示其个人的财富值,一个节点及其直接相连的子节点被定义为个小家庭。现给你一颗树,请计算出最富裕的小家庭的财富和。

MISAYAONE的博客 1902

angular12封装好的一个httpService类

angualr12 angular http httpService

zwjapple的专栏 515

工业级实战:C#上位机集成YOLO实现多目标跟踪(含数据库存储+报表导出)

推理核心:ONNX Runtime实现C#直接推理YOLO模型,GPU优先+CPU降级适配工业机;跟踪核心:SORT算法轻量级实现多目标跟踪,保证工业场景实时性与稳定性;数据核心:MySQL存储+本地缓存,Excel报表标准化导出,满足工业数据追溯与质检需求;部署核心:模型优化、GPU加速、开机自启,保证工业级7x24小时运行。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 473

超声波传感器(CHx01) 学习笔记 Ⅲ - I2C读写操作

CH-x01 通过 2 线 I2C 协议与主机处理器通信

nicole088的专栏 1737

Angular 6:无法正确设置http标头的Content-Type

let header = new HttpHeaders(); headers= headers.append('content-type', 'application/json'); return this.http.post(this.URL , body, {headers : header}); 如果它不能运行,再尝试添加这样的标题 : let header = new HttpHea...

u010165223的博客 2618

使用 Simulink 进行电力电子系统的大信号模型仿真

电力电子系统(Power Electronics System)包括各种功率转换器(如 DC-DC 转换器、逆变器等)。这些设备中的关键组件(如 MOSFET、IGBT、电容器、电感器等)不仅影响系统的性能,还直接关系到系统的稳定性、效率和可靠性。因此,在设计阶段进行详细的建模和仿真至关重要。大信号模型仿真的目的是通过模拟系统在非线性条件下的真实行为,评估其瞬态响应、稳态性能以及对不同负载和输入电压变化的响应。通过本教程,我们介绍了如何使用 Simulink 进行电力电子系统的大信号模型仿真。背景介绍。

xiaoheshang_123的博客 303

angular6中ajax请求,在 Angular6 中使用 HTTP 请求服务端数据的步骤详解

第一步第二步在根组件 app.components.ts 中引入 HttpClientModule 模块。// app.components.tsimport {HttpClientModule} from "@angular/common/http"; //引入HttpClientModule 模块imports: [BrowserModule,AppRoutingModule,HttpClie...

weixin_34871076的博客 393

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ts获取服务器数据_在 Angular6 中使用 HTTP 请求服务端数据

第一步准备好api接口地址, 例如 https://api.example.com/api/第二步在根组件 app.module.ts 中引入 HttpClientModule 模块。// app.module.tsimport {HttpClientModule} from "@angular/common/http"; //引入HttpClientModule 模块imports: [Bro...

weixin_39815925的博客 690

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

angular6入门实战,环境搭建、添加组件、服务、路由和HTTP

目录 一、新建web项目 二、启动项目 三、添加表格,css控制隔行变色 四、创建组件 五、显示列表 创建模拟数据 导入 用* ngFor列出 使用* ngIf隐藏空白详细信息 设置所选样式 添加单击事件绑定 添加单击事件处理程序 六、主/明细组件 建立HeroDetailComponent 添加属性@Input() 七、服务 创建HeroService ...

花开陌上无言语,溪水流声自悠然。 2332

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

在 Angular6 中使用 HTTP 请求服务端数据

第一步 准备好api接口地址, 例如 https://api.example.com/api/ 第二步 在根组件 app.module.ts 中引入 HttpClientModule 模块。 // app.module.ts import {HttpClientModule} from "@angular/common/http"; //引入HttpClientModule 模块 i...

xwnxwn的专栏 1902

在 Angular6 中使用 HTTP 请求服务端数据的步骤详解

第一步 准备好api接口地址, 例如 https://api.example.com/api/ 第二步 在根组件 app.components.ts 中引入 HttpClientModule 模块。 ? 1 2 3 4 5 6 7 // app.components.ts import {HttpCli...

plpldog的博客 6210

Angular 4 到 Angular6 http请求的变化

以下纯属个人学习中遇到的问题以及解决后的感悟,欢迎指点错误: 在Angular4 中 ,要用使用http请求服务器数据,应该在constructor中导入Http模块 , 如: constructor(private http: Http){}, 在使用时,使用this.http.get(url).map(res =&gt; res.json());即可,其中map 源于 'rxjs/Rx'响...

LittleDragonHu的博客 3060

【CuteJavaScript】Angular6入门项目(4.改造组件和添加HTTP服务)

本文目录 一、项目起步 二、编写路由组件 三、编写页面组件 1.编写单一组件 2.模拟数据 3.编写主从组件 四、编写服务 1.为什么需要服务 2.编写服务 五、引入RxJS 1.关于RxJS 2.引入RxJS 3.改造数据获取方式 六、改造组件 1.添加历史记录组件 2.添加和删除历史记录 七、HTTP改造 1.引入HTTP 2.通过HTTP请求数据 3.通过HTTP...

pingan8787 528

angular2创建应用_帮助您了解和创建Angular 6应用程序的快速指南

angular2创建应用This post is divided into two parts: 这篇文章分为两个部分: The first part demonstrates how to create a simple Angular 6 App using Angular CLI and explains the project structure. 第一部分演示了如何使用Angular ...

cumian8165的博客 328
上一篇: Angular的injectable装饰器解析
下一篇: Golang中http的小知识汇总
那记忆微凉
博客等级 码龄9年 412粉丝 387原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值