2017-12-02 212 views
-1

我如何使这个jquery请求在角框架?我非常喜欢角度框架,但我很喜欢它。我喜欢弄清楚如何使用基本授权标题进行HTTP获取。角度Api请求与基本Authorizartion

var settings = { 
    "url": "https://sampleapi.com", 
    "method": "GET", 
    "headers": { 
    "authorization": "Basic QjNYRnZ6S1Jk", 
    "content-type": "aplication/json" 
    } 
} 

$.ajax(settings).done(function (response) { 
    console.log(response); 
}); 

我应该建立一个服务控制器还是一个常规组件。

+1

如果你爱上了这个框架是这样,你为什么不以涵盖HTTP相关的问题一个基本的教程? (有很多) –

+1

或者也许只是谷歌周围:https://angular.io/guide/http(角度http请求的第一个结果) –

回答

0

您可以使用RequestOptions如下

const url = `https://sampleapi.com`; 
const headers = new Headers(); 
headers.append('Authorization', 'Basic QjNYRnZ6S1Jk'); 
headers.append('Content-Type', 'application/json'); 
const options = new RequestOptions({ headers: headers }); 
return this.http.get(url, options) 
    .map(this.extractData) 
    .catch(this.handleErrors); 

private extractData(res: Response) { 
      const data = res.json(); 
      return data; 
} 

private handleErrors(error: Response | any) { 
    let errMsg: string; 
    if (error instanceof Response) { 
     const body = error.json() || ''; 
     const err = body.error || JSON.stringify(body); 
     errMsg = `${error.status} - ${error.statusText || ''} ${err}`; 
    } else { 
     errMsg = error.message ? error.message : error.toString(); 
    } 
    console.error(errMsg); 
    return Observable.throw(errMsg); 
} 
0

这里是有可能为你工作,如果你使用的是4.3角和更高,并且希望使用新的HttpClient和HttpHeaders。

这里是不与基本授权的呼叫的服务:

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

const url = `https://sampleapi.com`; 

@Injectable() 
export class BasicService { 
    private _headers = new HttpHeaders().set('Content-Type', 'application/json'); 
    constructor(private httpClient: HttpClient) { } 

    getWithBasicAuth(): Observable<any> { 
    const headers = this._headers.append('Authorization', 'Basic QjNYRnZ6S1Jk'); 
    return this.httpClient.get<any>(url, { headers : headers }); 
    } 
} 

下面是将消耗上面的服务的组件。

import { Component, OnInit } from '@angular/core'; 
import { BasicService } from '../services/basic.service'; 

@Component({ 
    selector: 'app-basic', 
    templateUrl: './basic.component.html', 
    styleUrls: ['./basic.component.css'] 
}) 
export class BasicComponent implements OnInit { 
    dataFormService: any; 

    constructor(private basicService: BasicService) { } 

    ngOnInit() { 
    this.basicService.getWithBasicAuth().subscribe(data => this.dataFormService = data); 
    } 
} 

您可能希望从any改变从服务的返回类型更合适一些。

0

角4+如果你想编码清洁结构良好的程序

  1. 您必须像下面的代码创建服务开头:

    // Class name is setting.service.ts 
    
    import {Injectable} from '@angular/core'; 
    import {HttpClient} from '@angular/common/http'; 
    import {HttpHeaders} from '@angular/common/http'; 
    
    @Injectable() 
    export class SettingService { 
        constructor(public http: HttpClient, public url: string) { } 
    
        get() { 
         let headers = new HttpHeaders(); 
         headers.set('authorization', 'Basic QjNYRnZ6S1Jk'); 
         headers.set('content-type', 'application/json'); 
    
         return this.http.get(this.url}, {headers: headers}); 
        } 
    } 
    
  2. 然后在app.module.ts内使用此服务,在个进口HttpClientModule和内部提供商把你的服务(这里是SettingService):

    import {BrowserModule} from '@angular/platform-browser'; 
    import {NgModule} from '@angular/core'; 
    import {HttpClientModule} from '@angular/common/http'; 
    
    import {SettingService} from './services/setting.service'; 
    
    @NgModule({ 
        declarations: [ 
         AppComponent 
        ], 
        imports: [ 
         BrowserModule, 
         HttpClientModule 
        ], 
        providers: [ 
         SettingService 
        ], 
        bootstrap: [AppComponent] 
    }) 
    export class AppModule { 
    } 
    
  3. 而且毕竟,你可以像下面的代码使用内部的组件服务:

    // Class name is home.component.ts 
    
    import {Component} from '@angular/core'; 
    
    import {SettingService} from './services/setting.service'; 
    
    @Component({ 
        selector: 'app-home', 
        templateUrl: './home.component.html', 
        styleUrls: ['./home.component.css'] 
    }) 
    export class HomeComponent { 
    
        constructor(private settingService: SettingService) { 
         this.settingService.get('https://sampleapi.com').subscribe(
          (success) => {    
           console.log(success); 
          }, 
          (error) => { 
           console.log(error); 
          }, 
          () => { 
           console.log('Complete') 
          } 
         ); 
        } 
    } 
    

注意:我pu牛逼我的要求内构造但你可以把它 到处

+0

错误在src/app/setting.service.ts(14,38 ):错误TS1005:','预计。 src/app/setting.service.ts(14,39):错误TS1068:意外的标记。期望构造函数,方法,访问器或属性 。 src/app/setting.service。ts(14,41):错误TS1068:意外的标记。期望构造函数,方法,访问器或属性 。 src/app/setting.service.ts(14,59):错误TS1128:声明或预期的语句。 src/app/setting.service.ts(15,5):错误TS1128:声明或预期的语句。 src/app/setting.service.ts(16,1):错误TS1128:预期的声明或语句。 –

+0

为什么我做错了或没做?大声笑 –

+0

请注意组件和服务中的typescript路径,例如我把我的服务放在service文件夹里面 –