• Angular4.x跨域请求


    Angular4.x请求

    码云地址:

    https://gitee.com/ccsoftlucifer/Angular4Study

    1. 搭建工程

    新建一个工程angulardemo03

    ng new angulardemo03

    npm install 更新依赖

    2. 新建组件

    在app目录新建文件夹components,自己自定义的所有的组件都放在这个目录下面.

    ng g component components/news

    目录结构如下:

    3.添加请求相关的model

    编辑app.modle.ts

    1 import { HttpClientModule  } from '@angular/common/http'; 
     1 @NgModule({
     2   declarations: [
     3     AppComponent,
     4     NewsComponent
     5   ],
     6   imports: [
     7     BrowserModule,
     8     AppRoutingModule,
     9     HttpClientModule
    10   ],
    11   providers: [],
    12   bootstrap: [AppComponent]
    13 })

    4.编写代码

    news.component.html 编写一个按钮用来发送请求:

    <h2>你好angular</h2>
    <p>
      news works!
    </p>
    
    <br>
    <button (click)="requestData()">请求数据</button>
    从服务器拿到的值:
    {{value}}

    news.component.ts编写逻辑,导入http服务

     1 import { Component, OnInit } from '@angular/core';
     2 
     3 import {HttpClient} from '@angular/common/http';
     4 @Component({
     5   selector: 'app-news',
     6   templateUrl: './news.component.html',
     7   styleUrls: ['./news.component.css']
     8 })
     9 export class NewsComponent implements OnInit {
    10   public value:any
    11   constructor(private http:HttpClient) { }
    12 
    13   ngOnInit() {
    14     // this.http.get('http://localhost:8080/user/findUser?id=1')
    15     //  .subscribe(res=>{ this.value = res })
    16 
    17   }
    18   //请求数据方法
    19   requestData(){
    20     console.log('请求数据');
    21     var url='http://localhost:8080/user/findUser?id=1';//这里定义一个地址,要允许跨域
    22     this.http.get(url).subscribe(function(data){
    23       console.log(data);
    24     },function(err){
    25       console.log(err);
    26     })
    27   }
    28 
    29 }

    5.解决跨域

      由于前端工程是localhost:4200,请求后端工程Localhost:8080,会出现跨域错误:

      Access-Control-Allow-Origin' header is present on the requested resource.

      解决办法:

      5.1 在项目的根目录添加proxy.config.json文件

      

    1 {
    2     "/": {
    3         "target": "http://localhost:8080/"
    4     }
    5 }

      5.2修改package.json文件

    1 "scripts": {
    2     "ng": "ng",
    3     "start": "ng serve --proxy-config proxy.config.json",
    4     "build": "ng build",
    5     "test": "ng test",
    6     "lint": "ng lint",
    7     "e2e": "ng e2e"
    8   },

      5.3修改angular.json

     1 "serve": {
     2           "builder": "@angular-devkit/build-angular:dev-server",
     3           "options": {
     4             "browserTarget": "angulardemo03:build",
     5             "proxyConfig":"proxy.config.json"
     6           },
     7           "configurations": {
     8             "production": {
     9               "browserTarget": "angulardemo03:build:production"
    10             }
    11           }
    12         },

      5.4服务器端添加注解

    1  @CrossOrigin(origins = "http://localhost:4200",allowCredentials = "true")

      

    这样数据就拿过来了啦~

      使用RxJS进行请求发送:

    1 import { Observable, Subject, asapScheduler, pipe, of, from, interval, merge, fromEvent,  SubscriptionLike, PartialObserver, concat } from 'rxjs';
    2 import { map, filter, scan } from 'rxjs/operators';
    3 import { webSocket } from 'rxjs/webSocket';
    4 import { ajax } from 'rxjs/ajax';
    5 import { TestScheduler } from 'rxjs/testing';

      请求:

     1 //另外一种请求方式
     2     useRxJsRequestData(){
     3       var _result=this;
     4       console.log('请求数据');
     5       if(this.inputValue==''){
     6           //用户没有输入
     7           alert('请先输入值');
     8       }else{
     9           //用户有输入的值
    10           var url='http://localhost:8080/user/findUser?id='+this.inputValue;
    11           this.http.get(url).subscribe(res =>{
    12             console.log(res);
    13             console.log(typeof(res));
    14             console.log(res['id']);
    15             var _this = this;
    16             
    17            _this.obj.id=res['id'];
    18             _this.obj.useName=res['userName'];
    19             _this.obj.password=res['password'];
    20             _this.obj.age=res['age'];
    21           })
    22          //console.log(map);
    23       }
    24     }
  • 相关阅读:
    本地发送博客
    0.查看Android framework源码
    flutter_5_深入_2_深入layout、paint流程
    flutter_5_深入_1_深入widget树和构建流程
    flutter_5_深入_0_每帧的处理流程简介
    蓝牙基础
    Android低功耗蓝牙开发
    flutter2_widget_3布局类组件1
    flutter2_widget_1简介
    Android gradle Plugin
  • 原文地址:https://www.cnblogs.com/battlecry/p/10789464.html
Copyright © 2020-2023  润新知