angular - 使用方法而不是构造函数注入(inject)服务

标签 angular angular5

假设我有这个服务和组件。我想使用 MySillyService 的多个实例。

@Injectable()
export class MySillyService {

}

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})


export class AppComponent {

  vals: Array<MySillyService>;

  constructor() {

    this.vals = [1,2,3].map(v => {
       return this.getSillyService();
    });

  }

  @Inject(MySillyService)
  getSillyService(mss: MySillyService){
    console.log('getting mss...');
    return mss;
  }

}

这不会编译,因为我收到此错误:

enter image description here

有没有办法使用方法而不是构造函数来注入(inject)服务的新实例?

最佳答案

Injector service 可用于使用方法注入(inject)服务:

import { Injector } from '@angular/core';

export class AppComponent {

    vals: Array<MySillyService>;
    mySillyService: MySillyService;

    constructor(private injector: Injector) {
       this.vals = ['some','dynamic','array'].map(v => this.getSillyService());
    }

    getSillyService() {
       return this.injector.get(MySillyService);
    }

    injectAnotherInstance() {
       this.mySillyService = this.injector.get(MySillyService);
    }
}

关于angular - 使用方法而不是构造函数注入(inject)服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48570692/

相关文章:

css - 将外部样式表导入 Angular 5 元素

go - Angular 5 和 Go 网络服务

javascript - 通过 URL 检测媒体(图片、视频)类型

javascript - 如何在 Angular 7 中使用 goJs TreeModel

angular - IntelliJ IDEA 显示 matHeaderRowDef 错误

angular - 您如何确定是什么触发了 Angular2 中的变化检测检测(调试 ngDoCheck 无限循环)?

angular5 - Angular 5将单击事件的数据从父组件传递到在父组件单击的按钮上的子组件

angular - 是否有任何选项可以在 Angular 2-5 中命名模块文件夹路径?