【问题标题】:How to call an angular 2+ service from a regular typescript class (non - component)如何从常规打字稿类(非组件)调用角度 2+ 服务
【发布时间】:2019-08-10 09:23:39
【问题描述】:

我正在构建一个 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 typescript phaser-framework


    【解决方案1】:

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

    我认为您在这里混淆了概念。游戏开发 (Phaser) 使用与 Angular 不同的概念。

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

    如果您将游戏嵌入到 Angular 项目中,您应该将游戏封装在 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);
      }
    }
    

    【讨论】:

    • 嗨@Tobias。我正在将课程传递给移相器框架。我无法找到它们被实例化的实际位置。我想我必须对框架进行一些研究。我还是 Phaser 的新手
    • 也许你应该从你的 Angular 应用中封装/分割你的游戏。你需要角度吗?除了 Angular,还有其他 IoC 框架。例如phaser.io/news/2017/08/robotlegsjs-phaser-extension
    • 嘿,谢谢,但是,我正在尝试将游戏集成到现有的 Angular 项目中。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    相关资源
    最近更新 更多