I\'ve got a problem loading a class into an Angular component. I\'ve been trying to solve it for a long time; I\'ve even tried joining it all in a single file. What I have i
Blockquote
Registering providers in a component
Here's a revised HeroesComponent that registers the HeroService in its providers array.
import { Component } from '@angular/core';
import { HeroService } from './hero.service';
@Component({
selector: 'my-heroes',
providers: [HeroService],
template: `
`
})
export class HeroesComponent { }
Shockingly, the syntax has changed yet again in the latest version of Angular :-) From the Angular 6 docs:
Beginning with Angular 6.0, the preferred way to create a singleton services is to specify on the service that it should be provided in the application root. This is done by setting providedIn to root on the service's @Injectable decorator:
src/app/user.service.0.ts
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class UserService {
}
You have to use providers
instead of injectables
@Component({
selector: 'my-app',
providers: [NameService]
})
Complete code sample here.
You could also have the dependencies declared in the bootstrap-command like:
bootstrap(MyAppComponent,[NameService]);
At least that's what worked for me in alpha40.
this is the link: http://www.syntaxsuccess.com/viewarticle/dependency-injection-in-angular-2.0
The error No provider for NameService
is a common issue that many Angular2 beginners face.
Reason: Before using any custom service you first have to register it with NgModule by adding it to the providers list:
Solution:
@NgModule({
imports: [...],
providers: [CustomServiceName]
})
Add it to providers not injectables
@Component({
selector:'my-app',
providers: [NameService]
})