Объявление статического конструктора Angular2 Typescript - PullRequest
0 голосов
/ 06 июля 2018

Мне не хватает практики в статических классах, поэтому я не могу правильно инициализироваться. У меня есть следующий класс:

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
    });  
  }
}

Выполнение вышесказанного возвращает: "ERROR TypeError: Cannot read property 'request' of undefined"

При попытке отладки кажется, что http не определен (console.log), поэтому я предполагаю, что инициализация не правильная.

Любая помощь приветствуется

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Класс constructor будет вызываться, если вы создадите новый момент класса Utils, с другой стороны, 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
    });  
  }
}

если вы хотите использовать статические методы Utils, вам необходимо вручную назначить объект http, прежде чем использовать его

Utils.http = http; 

после этого вы можете использовать его;

0 голосов
/ 06 июля 2018

Я вижу, что вы хотите сделать POST запрос с formData объектом. Вы можете использовать http.post вместо request метод

И не нужно использовать static http: any. Также ваш метод не должен быть static.

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
    });  
  }
}
...