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。实际上,创建服务更有效。尽管如此,它还是希望在静态类中找到属性初始化的解决方案。非常感谢。