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     }

 

posted @ 2019-04-29 11:44  ccsoft  阅读(2162)  评论(0编辑  收藏  举报