Angular 如何调用角度2+;来自常规typescript类的服务(非组件)

Angular 如何调用角度2+;来自常规typescript类的服务(非组件),angular,typescript,phaser-framework,Angular,Typescript,Phaser Framework,我正在用angular 6构建Phaser 3应用程序。我想调用typescript类(一个Phaser场景)中的服务(GameService)。如何使类使用依赖项注入 export class PlayerConfigScene extends Phaser.Scene { constructor(private gameService: GameService) { super({ key: "PlayerConfigScene"

我正在用angular 6构建Phaser 3应用程序。我想调用typescript类(一个Phaser场景)中的服务(GameService)。如何使类使用依赖项注入

export class PlayerConfigScene extends Phaser.Scene {

    constructor(private gameService: GameService) {
        super({
            key: "PlayerConfigScene"
        });
    }

    init() {
        this.gameService.setEnableForms(true);
    } 
}
这就是服务

import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class GameService {

  private enableForms : BehaviorSubject<boolean> = new BehaviorSubject<boolean> (false);

  constructor() { }

  public setEnableForms(flag : boolean) {
    this.enableForms.next(flag);
  }

  public getEnableForms() : BehaviorSubject<boolean> {
    return this.enableForms;
  }


}
从'@angular/core'导入{Injectable};
从“rxjs”导入{BehaviorSubject};
@注射的({
providedIn:'根'
})
导出类游戏服务{
私有启用窗体:BehaviorSubject=新的BehaviorSubject(false);
构造函数(){}
公共setEnableForms(标志:布尔值){
this.enableForms.next(标志);
}
public getEnableForms():行为主体{
返回此.enableForms;
}
}

您可以将@Injectable注释添加到非angular类中,并将其添加到ngmodule中以使其可注入。但这似乎并不“正确”

我认为你把这里的概念搞混了。游戏开发(Phaser)使用不同于angular的概念

您在哪里调用/创建PlayerConfigScene对象?这不是在一个有角度的组件内还是可注射的?难道你不能将所需的服务注入到你的组件中,然后用你的服务构造你的配置对象吗

如果要将游戏嵌入角度项目中,则应将游戏封装在一个或至少一个组件中:

@Component({
  selector: "my-game-wrapper-component",
  template: "<div #myGameWrapper></div>"
})
export class MyGameWrapperComponent implements AfterViewInit {

  @ViewChild("myGameWrapper", { read: ElementRef }) myGameWrapperDiv: ElementRef;

  private game: MyAwesomeGame;

  constructor(private myAwesomeGameService: MyAwesomeGameService) {
    // MyAwesomeGameService has to be an injectable angular service
  }

  public ngAfterViewInit(): void {
    this.game = new MyAwesomeGame(this.myGameWrapperDiv.nativeElement, this.myAwesomeGameService);
  }
}
@组件({
选择器:“我的游戏包装组件”,
模板:“”
})
导出类MyGameWrapperComponent实现AfterViewInit{
@ViewChild(“myGameWrapper”,{read:ElementRef})myGameWrapperDiv:ElementRef;
私人游戏:MyAwesomeGame;
构造函数(私有myAwesomeGameService:myAwesomeGameService){
//MyAwesomeGameService必须是一个可注入的角度服务
}
public ngAfterViewInit():void{
this.game=新的MyAwesomeGame(this.myGameWrapperDiv.nativeElement,this.myAwesomeGameService);
}
}

Hi@Tobias。我正在把课程交给phaser framwork。我无法找到它们被实例化的实际位置。我想我必须对这个框架做一些研究。我对Phasermaybe还是新手,因为你应该将游戏从你的angular应用程序中封装/拆分。你需要有棱角的吗?除了angular,还有其他IoC框架。e、 嘿,谢谢,但是,我正在尝试将一个游戏集成到一个已经存在的角度项目中。