Getting Started With Angular 4.3+ HttpClient
将已有的项目添加到github
创建RESTAPI神器-JsonServer

  1. Angular-cli新建httpClientExample项目
    ng new httpClientExample
  2. ngModule中导入HttpClientModule
    typescript
    ....
    import { HttpClientModule } from '@angular/common/http';
    ....
    @NgModule({
    declarations: [
    AppComponent
    ],
    imports: [
    browserModule,
    HttpClientModule
    ],
    providers: [],
    bootstrap: [AppComponent]
    })
    export class AppModule { }
  3. npm安装json-server,代替api server提供API服务。(windows命令行提示符(管理员))
    npm install -g json-server

    1. 新建一各 JSON 文件,扮演我们的服务器上的数据库。

      {
      "customers": [ { "id": 1,"name": "Customer001","email": "customer001@email.com","tel": "0526252525" },{ "id": 2,"name": "Customer002","email": "customer002@email.com","tel": "0527252525" },{ "id": 3,"name": "Customer003","email": "customer003@email.com","tel": "0528252525" } ] }
    2. 启动服务。现在可像用Rest service进行查询, json-server更多使用点击这里.
      json-server --watch E:\db.json
  4. HttpClient Get请求。

    1. 导入HttpClient , @angular/common/http
    2. component 构造函数中注入HttpClient
    3. 使用.get(端点)方法创建HTTP GET请求
    4. 订阅(Subscribe )返回的observable并显示结果

      import { Component,OnInit } from '@angular/core';//OnInit 接口,要求实现OnInit方法。
      import { Observable } from "rxjs/Observable";//add
      import { HttpClient,} from "@angular/common/http";/add
      class Customer {
      id : number;
      name: string;
      email: string;
      tel: string;
      }    
      @Component({
      selector: 'customers',template: `
        <ul *ngIf="customersObservable | async as customers else empty">
            <li *ngFor="let customer of customers">
            {{customer|json}}
            </li> 
        </ul>
      `})   
      export class AppComponent implements OnInit {
      customersObservable : Observable<Customer[]>;    
      title = 'app';      
      constructor(private httpClient:HttpClient) {
      }
      ngOnInit() {//初始化时就开始get请求数据
      this.customersObservable = this.httpClient
          .get<Customer[]>("127.0.0.1:3000/customers");
      }
      }
  5. HTTP GET 请求参数: HttpParams
    1. 请求第1页,最大条数2:
      1. url方式
        http://127.0.0.1:3000/customers?_page=1&_limit=1
      2. 使用httpClient实现
        1. 导入HttpParams
          import {HttpParams} from "@angular/common/http";
        2. 构建一个 HttpParams 对象
          const params = new HttpParams().set('_page',"1").set('_limit',"1");
        3. 呼叫 .get() 方法并携带参数,然后将返回的 Observable 对象分配给customersObservable。(params 要与get在同一个方法中)
          this.customersObservable = this.httpClient.get("http://127.0.0.1:3000/customers",{params});
        4. 使用更简单的方法新建HttpParams对象:【fromString】
          const params = new HttpParams({fromString: '_page=1&_limit=1'});
      3. 带参Get请求(记url QueryString)

        const params = new HttpParams({fromString: '_page=1&_limit=1'});
        this.customersObservable = this.http
        .request("GET","http://127.0.0.1:3000/customers",
        {
        responseType:"json",
        params
        });
  6. 添加 HTTP Headers
    1. 导入HttpHeaders
      import { HttpHeaders } from '@angular/common/http';
    2. 新建客制的HttpHeader对象
      const headers = new HttpHeaders().set("X-CustomHttpHeader","CUSTOM_VALUE");
    3. 发送带httpHeader的请求

      const headers = new HttpHeaders().set("X-CustomHttpHeader","CUSTOM_VALUE");
      this.customersObservable = this.httpClient.get("http://127.0.0.1:3000/customers",{headers});
    4. 携带httpHeader,会出现重复请求的状况,第一次Option请求 204状态(Firefox 为Option请求方法),第二次为返回的结果。
  7. 发送HTTP PUT 请求
    HTTP PUT 方法用来完全替换 API server上的资源。用HttpClient 发送PUT 请求替换Customers上id为1的资源:

    this.httpClient.put("http://127.0.0.1:3000/customers/1",
    {
    "name": "NewCustomer001",
    "email": "newcustomer001@email.com",
    "tel": "0000252525"
    })
    .subscribe(
    data => {
    console.log("PUT Request is successful ",data);
    },
    error => {
    console.log("Rrror",error);
    }
    );
  8. 发送HTTP PATCH 请求
    HTTP PATCH 用来更新API server上的资源。
    this.httpClient.patch("http://127.0.0.1:3000/customers/1",
    {
    "email": "newcustomer001@gmail.com"
    })
    .subscribe(
    data => {
    console.log("PUT Request is successful ",
    error => {
    console.log("Error",error);
    }
    );
  9. 发送HTTP DELETE 请求
    HTTP DELETE 用来删除 API server上的资源
    this.httpClient.delete("http://127.0.0.1:3000/customers/1")
    .subscribe(
    data => {
    console.log("DELETE Request is successful ",error);
    }
    );
  10. 发送 HTTP POST 请求
    HTTP POST 方法有很多用途,大多数是用来在API server上新增一笔数据。
    this.httpClient.post("http://127.0.0.1:3000/customers",
    {
    "name": "Customer004",
    "email": "customer004@email.com",
    "tel": "0000252525"
    })
    .subscribe(
    data => {
    console.log("POST Request is successful ",error);
    }
    );

本地项目上传到GitHub

  1. 先从github创建一个空的仓库
    先从github创建一个空的仓库,并复制链接地址

    复制repo链接
  2. 初始化本地仓库,并提交内容到本地
    1. 如果没说明文档,如需,新建
      touch README.md
    2. 本地项目若未初始化,则初始化
      git init
    3. 添加全部已经修改的文件。
      git add . 等同git add -A
    4. 提交到本地
      git commit -m "提交说明"
  3. 连接到远程仓库,并将代码同步到远程仓库
    1. git remote add origin 远程仓库地址。Git-基础
      git remote add origin https://github.com/Kiakaa/httpClientExample.git
    2. 推送到远程仓库
      git push -u origin master

完整代码链接

Angular HttpClient http请求示例GET、PUT、 PATCH、POST、DELETE的更多相关文章

  1. ios – 使用MonoTouch,HttpClient和Charles Proxy时的HTTP流量监控问题

    我是HttpClient类的新手,我遇到了使用CharlesProxy监视请求的问题.基本上我需要的是监视从模拟器或实际iOS设备发出的请求.Here您可以找到有关如何配置CharlesforiOS开发的精彩教程.我正在制作简单的HttpClient请求,只是一个简单的授权代码有效,用户正在被授权,并且正在返回承载令牌.但是问题是,我在模拟器上的请求没有出现在Charleshttp流量监控列表中.

  2. 通过AFNetworking 2.0上传iOS图像

    我一直在寻找新的AFNetworking2.0上传图像的例子.但是我正在撞墙,无法弄清楚代码有什么问题.所以这是我使用的代码TIA解决方法我最终使用了多部分请求

  3. ios – 在Objective-C中发送分块的HTTP 1.1请求

    我有以下问题:我正在创建一个非常大的SOAP请求(数据是一个编码为Base64字符串的视频),因此我不能将其作为原始SOAP请求发送,而是需要在HTTP1.1块中发送它.我似乎无法弄明白该怎么做.我在这里使用了代码:WhatarealternativestoNSURLConnectionforchunkedtransferencoding但它似乎没有做我认为应该做的事情–我可以看到请求作为单个请求

  4. ios – AFNetworking / NSURLConnection接收NSPOSIXErrorDomain代码= 9“操作无法完成.坏文件描述符“

    有人在他们的AFNetworking操作中遇到这个错误吗?此外,如果我真的想要,如何故意关闭这个文件描述符?

  5. ios – 使用没有映射到POST对象的RestKit处理POST响应

    我有一个情况,我正在做一个对象的发布,但RESTAPI的响应不是要发布的对象的JSON表示形式.这还有别的东西.是否可以处理这个?即使它是JSON响应的字典表示法?解决方法我只是为您的回应创建一个新对象,并将您的回复映射到该对象.对象映射叙对象管理器执行

  6. ios – Swift2.0 HTTP请求无法正常工作

    参见英文答案>TransportsecurityhasblockedacleartextHTTP23个HelloStackoverflow,我将swift应用程序移动到Swift2.0后,我不断收到此错误:我看了下面的链接https://forums.developer.apple.com/thread/5835并将以下代码添加到我的info.plist中它仍然不起作用,任何人都有替代解决方案?解

  7. 如何在Swift语言中创建http请求

    概述:本文通过实例从同步和异步两种方式上回答了”如何在Swift语言中创建http请求“的问题。如果你对Objective-C比较了解的话,对于如何创建http请求你一定驾轻就熟了,而新语言Swift与其相比只有语法上的区别。但是,对才接触到这个崭新平台的初学者来说,他们仍然想知道“如何在Swift语言中创建http请求?”。在这里,我将作出一些建议来回答上述问题。常见的创建http请求的方式主要

  8. swift发起http post请求 with swifthttp包

    完毕后,即完成了cocoapods的安装和配置;下边介绍使用。利用xcode新建项目,项目建立完毕后,打开终端,并进入到项目的根目录下,输入:touchPodfileopen-ePodfile然后在编辑器中输入source'https://github.com/CocoaPods/Specs.git'platform:ios,'8.0'use_frameworks!pod'SwiftHTTP','~>0.9.2'保存退出,然后在终端输入:podinstall这是cocoapods会自动下载并配置依赖,折腾

  9. Swift HTTP请求集合

    )->Voidinprintln})带参数的get请求varrequest=HTTPTask()request.GET("http://google.com",parameters:["param":"param1","array":["firstarrayelement","second","third"],"num":23],arial;font-size:14px;line-height:21px">println("response:\(response.responSEObject!)")POS

  10. swift 自带HTTP请求

    )->Voidiniferror!=nil{println(error)}else{println(data)}}funcHTTPGet(url:String,callback:(String,String?)->Void){varrequest=NSMutableuRLRequest(URL:NSURL(string:url)!)HTTPsendRequest(request,callback)}funcHTTPsendRequest(request:NSMutableuRLRequest,callba

随机推荐

  1. Angular2 innerHtml删除样式

    我正在使用innerHtml并在我的cms中设置html,响应似乎没问题,如果我这样打印:{{poi.content}}它给了我正确的内容:``但是当我使用[innerHtml]=“poi.content”时,它会给我这个html:当我使用[innerHtml]时,有谁知道为什么它会剥离我的样式Angular2清理动态添加的HTML,样式,……

  2. 为Angular根组件/模块指定@Input()参数

    我有3个根组件,由根AppModule引导.你如何为其中一个组件指定@input()参数?也不由AppModalComponent获取:它是未定义的.据我所知,你不能将@input()传递给bootstraped组件.但您可以使用其他方法来做到这一点–将值作为属性传递.index.html:app.component.ts:

  3. angular-ui-bootstrap – 如何为angular ui-bootstrap tabs指令指定href参数

    我正在使用角度ui-bootstrap库,但我不知道如何为每个选项卡指定自定义href.在角度ui-bootstrap文档中,指定了一个可选参数select(),但我不知道如何使用它来自定义每个选项卡的链接另一种重新定义问题的方法是如何使用带有角度ui-bootstrap选项卡的路由我希望现在还不算太晚,但我今天遇到了同样的问题.你可以通过以下方式实现:1)在控制器中定义选项卡href:2)声明一个函数来改变控制器中的散列:3)使用以下标记:我不确定这是否是最好的方法,我很乐意听取别人的意见.

  4. 离子框架 – 标签内部的ng-click不起作用

    >为什么标签标签内的按钮不起作用?>但是标签外的按钮(登陆)工作正常,为什么?>请帮我解决这个问题.我需要在点击时做出回复按钮workingdemo解决方案就是不要为物品使用标签.而只是使用divHTML

  5. Angular 2:将值传递给路由数据解析

    我正在尝试编写一个DataResolver服务,允许Angular2路由器在初始化组件之前预加载数据.解析器需要调用不同的API端点来获取适合于正在加载的路由的数据.我正在构建一个通用解析器,而不是为我的许多组件中的每个组件设置一个解析器.因此,我想在路由定义中传递指向正确端点的自定义输入.例如,考虑以下路线:app.routes.ts在第一个实例中,解析器需要调用/path/to/resourc

  6. angularjs – 解释ngModel管道,解析器,格式化程序,viewChangeListeners和$watchers的顺序

    换句话说:如果在模型更新之前触发了“ng-change”,我可以理解,但是我很难理解在更新模型之后以及在完成填充更改之前触发函数绑定属性.如果您读到这里:祝贺并感谢您的耐心等待!

  7. 角度5模板形式检测形式有效性状态的变化

    为了拥有一个可以监听其包含的表单的有效性状态的变化的组件并执行某些组件的方法,是reactiveforms的方法吗?

  8. Angular 2 CSV文件下载

    我在springboot应用程序中有我的后端,从那里我返回一个.csv文件WheniamhittingtheURLinbrowsercsvfileisgettingdownloaded.现在我试图从我的角度2应用程序中点击此URL,代码是这样的:零件:服务:我正在下载文件,但它像ActuallyitshouldbeBook.csv请指导我缺少的东西.有一种解决方法,但您需要创建一个页面上的元

  9. angularjs – Angular UI-Grid:过滤后如何获取总项数

    提前致谢:)你应该避免使用jQuery并与API进行交互.首先需要在网格创建事件中保存对API的引用.您应该已经知道总行数.您可以使用以下命令获取可见/已过滤行数:要么您可以使用以下命令获取所选行的数量:

  10. angularjs – 迁移gulp进程以包含typescript

    或者我应该使用tsc作为我的主要构建工具,让它解决依赖关系,创建映射文件并制作捆绑包?

返回
顶部