Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript Angular2中的$http.defaults.headers_Typescript_Angular_Angular2 Services - Fatal编程技术网

Typescript Angular2中的$http.defaults.headers

Typescript Angular2中的$http.defaults.headers,typescript,angular,angular2-services,Typescript,Angular,Angular2 Services,我正在使用授权。在AngularJS 1.x中,我使用以下函数登录: function login(username, password) { var deferred = $q.defer(); $http.post("/api/login", { "username": username, "password": password }).then(function(response) {

我正在使用授权。在AngularJS 1.x中,我使用以下函数登录:

    function login(username, password) {
        var deferred = $q.defer();

        $http.post("/api/login", {
            "username": username,
            "password": password
        }).then(function(response) {
            if (response.data && response.data.token) {
                var tokenBegin = response.data.token.substring(0,6);
                var bearer = (tokenBegin === 'Bearer') ? '' : 'Bearer ';
                $http.defaults.headers.common.Authorization = bearer + response.data.token;
                deferred.resolve({ status: true, message: 'Login complete' });
            } else {
                deferred.reject(response);
            }
        }, function(reason) {
            deferred.reject(reason)
        });

        return deferred.promise;
    }

这是在修改
$http.defaults
对象。我对Angular2和TypeScript有点不知所措,因为Http类似乎没有
默认值
对象。我该怎么做呢?

有几种方法可以做到这一点:

  • 您可以实现自己的
    BaseRequestOptions
    类:

    import {BaseRequestOptions, RequestOptions, RequestOptionsArgs} from '@angular/http';
    
    export class AppRequestOptions extends BaseRequestOptions {
      constructor() {
      }
    
      merge(options?:RequestOptionsArgs):RequestOptions {
        options.url = 'https://www.test.org' + options.url;
        return super.merge(options);
      }
    }
    
    我是这样登记的:

    bootstrap(App, [
      HTTP_PROVIDERS,
      provide(RequestOptions, {useClass: AppRequestOptions})
    ]);
    
  • 扩展
    Http
    (或
    XHRBackend
    )类本身:

    @Injectable()
    export class CustomHttp extends Http {
      constructor(backend: ConnectionBackend, defaultOptions: RequestOptions) {
        super(backend, defaultOptions);
      }
    
      request(url: string | Request, options?: RequestOptionsArgs): Observable<Response> {
        console.log('request...');
        return super.request(url, options).catch(res => {
          // do something
        });        
      }
    
      get(url: string, options?: RequestOptionsArgs): Observable<Response> {
        console.log('get...');
        return super.get(url, options).catch(res => {
          // do something
        });
      }
    }
    
见以下问题:


我这样假设:
merge(选项?:RequestOptionsArgs):RequestOptions{options.headers.Authorization='Bearer:sometoken';return super.merge(选项);}
bootstrap(AppComponent, [HTTP_PROVIDERS,
  new Provider(Http, {
    useFactory: (backend: XHRBackend, defaultOptions: RequestOptions) => new CustomHttp(backend, defaultOptions),
    deps: [XHRBackend, RequestOptions]
  })
]);