2016-03-17 12 views
20

Angular2 access global service without including it in every constructor से मैं कोड को पकड़ा और थोड़ा है में संशोधित:Angular2 सेवा त्रुटि के लिए कोई प्रदाता

NoProviderError {message: "No provider for ApiService! (App -> MediaService -> ApiService)", stack: "Error: DI Exception↵

:

@Injectable() 
export class ApiService { 
    constructor(public http: Http) {} 

    get(url: string) { 
    return http.get(url); 
    } 

} 

@Injectable() 
export abstract class BaseService { 
    constructor(protected serv: ApiService) {} 
} 

@Injectable() 
export class MediaService extends BaseService { 

    // Why do we need this? 
    constructor(s: ApiService) { 
    super(s) 
    } 

    makeCall() { 
    this.serv.get("http://www.example.com/get_data") 
    } 

} 

हालांकि, जब मैं इस कोड मैं कंसोल में कोई त्रुटि मिलती है चलाने का प्रयास

मैं https://plnkr.co/edit/We2k9PDsYMVQWguMhhGl

पर कोड के साथ एक Plunkr बनाया है

किसी को भी पता है क्या इस त्रुटि का कारण बनता है?

उत्तर

27

आपको providers विशेषता में ApiService को भी परिभाषित करने की आवश्यकता है।

@Component({ 
    selector: 'my-app', 
    providers: [MediaService, ApiService], // <----- 
    template: ` 
    <div> 
     <h2>Hello {{name}}</h2> 
    </div> 
    `, 
    directives: [] 
}) 
export class App { 
    constructor(mediaService: MediaService) { 
    this.name = 'Angular2' 

    console.log('start'); 

    mediaService.makeCall(); 
    } 
} 

ऐसा इसलिए है क्योंकि इंजेक्टरों पर घटकों पर भरोसा किया जाता है।

: आप कैसे एक सेवा में एक सेवा इंजेक्षन के बारे में अधिक जानकारी चाहते हैं, तो आप इस सवाल पर एक नज़र हो सकता था
संबंधित मुद्दे