0

AHEAD-OF-TIME COMPILATION を使用しました。コンパイル後、AOT フォルダーが正常に生成されますが、app.modulengfactory.ts ファイルで問題が発生すると、 Build:Generic type 'HttpService' requires 1 type argument(s) のようなエラーがスローされます。プロジェクトをビルドするとき

私の app.Module.ts ファイルは以下の通りです

import { NgModule } from "@angular/core";
import { BrowserModule } from "@angular/platform-browser";
import { HttpModule, XHRBackend } from "@angular/http";
import { routing } from "./app.routes";
import { HttpService } from "./http.service";
import { LoginService } from "./login.service";
import { LoaderService } from "./shared/loader.service";
import { SharedModule } from "./shared/shared.module";
import { MaterialModule } from '@angular/material';
    @NgModule({
         declarations: [AppComponent],
         imports: [BrowserModule,
                   HttpModule,
                   routing,
                   MaterialModule,
                   SharedModule
                   ],
         bootstrap: [AppComponent],
         providers: [HttpService,LoginService, LoaderService],
             })
     export class AppModule { }

問題は、汎用クラスをパラメーターとして受け入れる httpservice にパラメーターを渡していないことだと思います。

私のHttpサービスは以下の通りです

 import {Http, Headers, RequestOptions, Response} from "@angular/http";
 import {Injectable} from "@angular/core";
 import {Observable} from 'rxjs/Observable';
 import 'rxjs/add/operator/map';
 import 'rxjs/add/operator/catch';
 import 'rxjs/Rx';

 @Injectable()
  export class HttpService<T> { 

  constructor(private http: Http) {
      }

    get(url: string) {
    return this.intercept(this.http.get(url).map(res => res.json()));
    }
    post(url: string, body: T) {
    let jsonBody = JSON.stringify(body);
    let headers = new Headers({ 'Content-Type':     'application/json;charset=utf-8' });
    let options = new RequestOptions({ headers: headers });
    return this.intercept(this.http.post(url, jsonBody, options).map(res => res.json()));
    }

put(url: string, body: T) {
    let jsonBody = JSON.stringify(body);
    let headers = new Headers({ 'Content-Type': 'application/json; charset=utf-8' });
    let options = new RequestOptions({ headers: headers });

    return this.intercept(this.http.put(url, jsonBody, options).map(res => res.json()));
   }

delete(url: string) {
    return this.intercept(this.http.delete(url).map(res => res.json()));
}

intercept(observable: Observable<Response>) {
    return observable.catch((err, source) => {
        if (err.status === 401) {
            location.href = "/Login";
        }

        else if (err.status === 500) {
            return Observable.throw(err);
        }

        else {
            return Observable.throw(err);
        }
    });
   }
}

したがって、この問題を解決するにはどうすればよいか提案をお願いします。

4

2 に答える 2

0

次のようにサービスを変更します。

import {Injectable} from '@angular/core'
import {HttpModule, Http,Response} from "@angular/http";
import {Observable} from 'rxjs/Observable';
import 'rxjs/Rx';

@Injectable()
export class HttpService { 

    constructor(private http: Http) {
    }

    getUser(url: string):Observable<any> {
        return this.http.get(url).map((res:Response) => {
            return res.json();
        });
    }
}

これがpunklrです:https ://plnkr.co/edit/7T3Qiv0jfXiIWT0BPp0e?p=preview

ここでサービスの例を見ることもできます。https://angular.io/docs/ts/latest/guide/server-communication.html#!%23http-client

于 2016-12-15T07:22:48.913 に答える