Angular2 Typescript静态构造函数声明

Angular2 Typescript静态构造函数声明,typescript,angular5,static-classes,Typescript,Angular5,Static Classes,我缺乏一些关于静态类的练习,因此无法正确初始化。我有以下课程: import { HttpEvent, HttpClient, HttpRequest, HttpEventType } from '@angular/common/http'; export class Utils { static http: any; constructor(private http: HttpClient) {} static uploadMediaFile(file, api: strin

我缺乏一些关于静态类的练习,因此无法正确初始化。我有以下课程:

import { HttpEvent, HttpClient, HttpRequest, HttpEventType } from '@angular/common/http';

export class Utils {

  static http: any;
  constructor(private http: HttpClient) {}

  static uploadMediaFile(file, api: string, model: any) {
    const formData = new FormData();
    formData.append(file.name, file);
    const uploadReq = new HttpRequest("POST", api, formData, {
      reportProgress: true,
    });

    this.http.request(uploadReq).subscribe(event => {
     //blah blah
    });  
  }
}
执行上述操作时,返回:
“错误类型错误:无法读取未定义的属性'request'”

尝试调试时,http似乎未定义(console.log),因此我假定初始化不正确


欢迎提供任何帮助

我发现您希望使用
formData
对象执行
POST
请求。您可以使用
http.post
而不是
request
方法

而且不需要使用
静态http:any
。此外,您的方法不必是
静态的

export class Utils {

  constructor(private http: HttpClient) {}

  uploadMediaFile(file, api: string, model: any) {
    const formData = new FormData();
    formData.append(file.name, file);
    const uploadReq = new HttpRequest("POST", api, formData, {
      reportProgress: true,
    });

    this.http.post(uploadReq).subscribe(event => {
     //blah blah
    });  
  }
}

如果您创建了
Utils
类的新instant,则类
构造函数将调用,而在另一端
static
(http)只是声明了,没有分配一个值,说明为什么Utils.http是未定义的。 我相信您可能会混淆角度依赖注入,最好的情况是创建UtilsService注入http对象,而不是使用静态方法

@Injectable()
export class UtilsService {

  constructor(private http: HttpClient) {}

  uploadMediaFile(file, api: string, model: any) {
    const formData = new FormData();
    formData.append(file.name, file);
    const uploadReq = new HttpRequest("POST", api, formData, {
      reportProgress: true,
    });

    this.http.request(uploadReq).subscribe(event => {
     //blah blah
    });  
  }
}
如果要使用UTIL的静态方法,必须在使用http对象之前手动分配它

Utils.http = http; 

之后你可以使用它

为什么要使用static,我认为您需要创建服务而不是类
statichttp:any的实用程序是什么你在哪里使用它?@AmitChigadani就是这样,我不知道如何正确初始化http。实际上,创建服务更有效。尽管如此,它还是希望在静态类中找到属性初始化的解决方案。非常感谢。