我正在构建一个角度为6的Phaser 3应用程序。我想在一个打字稿类(这是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;
}
}
答案 0 :(得分:0)
您可以将@Injectable批注添加到非角度类,并将其添加到ngmodule使其可注入。但这似乎不是“正确的”。
我认为您在这里混淆了一些概念。游戏开发(Phaser)使用的概念与角度游戏不同。
您要在哪里调用/创建PlayerConfigScene-Object?这不是在角组件内还是可注射的?您难道不只是将所需的服务注入到您的组件,然后用您的服务构造您的配置对象吗?
如果要将游戏嵌入到有角项目中,则应将游戏封装在web component或至少在组件中:
@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);
}
}