0
親クラスがHTTPConnection
です。これはネットワークのutilクラスとしてコードの繰り返しを減らすために使用しますが、私が使用しようとするとcore.umd.js
はUncaught ReferenceError: HTTPConnection is not defined
と表示されますが、混乱します。親クラスが定義されていません
マイHTTPConnection
クラス:
import {Response, RequestOptionsArgs, Headers} from "@angular/http";
import {Observable} from "rxjs/Observable";
export class HTTPConnection {
protected static addAuthorizationHeader(token: string, reqOptionsArgs?: RequestOptionsArgs): RequestOptionsArgs {
if (reqOptionsArgs) {
reqOptionsArgs.headers.append('Authorization', token);
return reqOptionsArgs;
}
var headers = new Headers();
headers.append('Authorization', token);
return {headers: headers};
}
//Copied from the Angular 2 Developer Guide - HTTP Client
protected static extractData(res: Response) {
return res.json || {};
}
protected static handleError (error: any) {
// In a real world app, we might use a remote logging infrastructure
// We'd also dig deeper into the error to get a better message
let errMsg = "Error: " + (error.message) ? error.message : error.status ? `${error.status} - ${error.statusText}` : 'Server error';
console.error(errMsg); // log to console instead
return Observable.throw(errMsg);
}
}
それを拡張サービス:
import {Injectable} from "@angular/core";
import {Observable} from "rxjs/Observable";
import {Http, Response} from "@angular/http";
import {HTTPConnection} from "./http.connection";
import 'rxjs/add/operator/map';
@Injectable()
export class CoursesService extends HTTPConnection {
private token: string = "pew";
constructor(private _http: Http) {
super();
}
getCourses(): Observable<Response> {
return this._http.get('https://httpbin.org/get', HTTPConnection.addAuthorizationHeader(this.token))
.map(HTTPConnection.extractData)
.catch(HTTPConnection.handleError);
}
}
誰かがこの
答えはありませんが、なぜ継承を使用するのですか?なぜなら、静的ユーティリティ関数を提供するために、HTTPConnectionのすべてのユーザーがそれを拡張するように強制します。単に静的な静的関数、あるいはトップレベルのユーティリティ関数を使ってクラスを定義するだけではどうですか? –
@JBNizetそれはそれほど重要なことではありません – silverAndroid