2017-12-14 8 views
0

サービスクラス(CourseService)を作成します。どのコンポーネントにパラメータ化されたコンストラクタを持つサービスを注入する - 角度

サービスクラスパラメータ化されたコンストラクタを持つ

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

    @Injectable() 
    export class CourseService { 

    constructor(private name?:string) { } 

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

} 

コンポーネントにサービスを注入します。

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) 

はどのコンポーネントでこのサービスを注入する:プロバイダで

はすでにコンポーネントクラス

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(); 
     } 

    } 

ブラウザのコンソールエラー作成され、この

providers: [ 
    CourseService 
    ] 

のように注射して?

+0

サービスのインスタンスが必要な場合は、コンテナから文字列を入力することはできません。それをローカル変数にするだけです。提供されたサービスのみを注入できます。私は 'CourseServicesService'が上記のタイプミスであると思います、はい? –

答えて

1

設計上不可能です。 Angularの注射剤は、サービスが定義されているスコープ全体で共有されます(インスタンスは1つだけです)。同じインスタンスのコンストラクタで異なるパラメータを渡すだけでは意味がありません。

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

    ngOnInit() { 
    let serviceName = this.courseService.getName(); 
    } 
} 
関連する問題