如何将带有参数化构造函数的服务注入到组件中 - Angular

asw*_*yak 4 dependency-injection angular

创建一个服务类(CourseService):

带有参数化构造函数的服务类

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

  @Injectable()
  export class CourseService {

  constructor(private name?:string) { }

  getName() : string{
    return "Service Name is"+ this.name;
  }

}
Run Code Online (Sandbox Code Playgroud)

将服务注入组件。

在 Provider 中,它已经像这样注入了

  providers: [
    CourseService
  ]
Run Code Online (Sandbox Code Playgroud)

创建组件类

    import { Component, OnInit } from '@angular/core';
    import { CourseService } from '../../services/course.service';

    @Component({
      selector: 'app-course',
      templateUrl: './course.component.html',
      styleUrls: ['./course.component.css']
    })
    export class CourseComponent implements OnInit {

      constructor(private courseService: CourseService) { }

      ngOnInit() {

        let serviceName = this.courseService.getName();
      }

    }
Run Code Online (Sandbox Code Playgroud)

浏览器控制台错误:

 AppComponent.html:1 ERROR Error: StaticInjectorError[CourseService]: 
   StaticInjectorError[CourseService]: 
   NullInjectorError: No provider for CourseService!
   at _NullInjector.get (core.js:993)
   at resolveToken (core.js:1281)
   at tryResolveToken (core.js:1223)
   at StaticInjector.get (core.js:1094)
   at resolveToken (core.js:1281)
   at tryResolveToken (core.js:1223)
   at StaticInjector.get (core.js:1094)
   at resolveNgModuleDep (core.js:10878)
   at NgModuleRef_.get (core.js:12110)
   at resolveDep (core.js:12608)
Run Code Online (Sandbox Code Playgroud)

如何在组件中注入这个服务?

Dan*_*cal 6

这是不可能的设计。Angular 的可注入对象在定义服务的整个范围内共享(只有一个实例)。在构造函数中为同一个实例传递不同的参数是没有意义的。如果您需要许多服务实例,您可以自己创建它,只需执行以下操作:

export class CourseComponent implements OnInit {
  private courseService: CourseService;
  constructor() { 
    this.courseService = new CourseService('someName');
  }

  ngOnInit() {
    let serviceName = this.courseService.getName();
  }
}
Run Code Online (Sandbox Code Playgroud)