将Angular服务注入导出的函数

时间:2019-07-23 10:58:55

标签: angular typescript dependency-injection

我有一个可注射的服务来显示吐司消息。我想在另一个只有一些导出函数的打字稿文件中使用它。

这是我的服务

import { Injectable } from "@angular/core"; 
import { NotifierService } from "angular-notifier";

@Injectable({
  providedIn: "root"
})
export class Notifier {
  notifier: NotifierService;

  constructor(private notifierService: NotifierService) {
    this.notifier = this.notifierService;
  }

  notifiy(type, message) {
    this.notifierService.notify(type, message);
  }
}

这是导出的函数,其中我需要根据条件显示一些吐司。这包含在另一个打字稿文件中。

export function validateFile(file) {
let type = getFileType(file.name);
let size = file.size;
switch (type) {
    case "image": {
      if (size > 10000000) {
        return false;
      } else {
        return true;
      }
    }

case "audio": {
  if (size > 200000000) {
    return false;
  } else {
    return true;
  }
}

case "video": {
  if (size > 300000000) {
    return false;
  } else {
    return true;
  }
}

case "compress": {
  if (size > 200000000) {
    return false;
  } else {
    return true;
  }
}

default: {
  return false;
}
  }
}

如何在此功能中使用通告程序服务的notify方法?

1 个答案:

答案 0 :(得分:-1)

    import { Injectable } from "@angular/core"; 

    @Injectable({
      providedIn: "root"
    })
    export class NotifierService {
    notifySubject$ = new Subject<{}>();

     notify(type, message) {
        this.notifySubject.next({type, message}));
      }

    subscribeToNotifications() {
    return this.notifySubject.asObservable();
}
    }

==================

   export class SomeClass {

   constructor(private notifier: NotifierService) {}

export function validateFile(file) {
let type = getFileType(file.name);
let size = file.size;
switch (type) {
    case "image": {
      this.notifier.notify(type, 'some message')
      if (size > 10000000) {
        return false;
      } else {
        return true;
      }
    }

case "audio": {
      this.notifier.notify(type, 'some message')
  if (size > 200000000) {
    return false;
  } else {
    return true;
  }
}

case "video": {
      this.notifier.notify(type, 'some message')
  if (size > 300000000) {
    return false;
  } else {
    return true;
  }
}

case "compress": {
      this.notifier.notify(type, 'some message')
  if (size > 200000000) {
    return false;
  } else {
    return true;
  }
}

default: {
  return false;
}
  }
}

}