Ben,
like Pascal commented in that article, everything is a singleton already.
Let's see it with a few examples
class Service {}
@Component({})
class MyComponent {
constructor(svc: Service) {}
}
bootstrap(MyComponent, [Service]);
At this point Service is the same instance for the entire application. So
if you have N components listen to this service, and one of them modifies
something in it, all of them will be aware of that change.
Now, what if I want Service to be visible in just one component? So you use
"providers"
class Service {}
@Component({})
class ChildCmp {
constructor(svc: Service) {} // Same instance as in the parent
}
@Component({ providers : [Service], directives : [ChildCmp]] })
class MyComponent {
constructor(svc: Service) {}
}
@Component({})
class AnotherComponent {
constructor(svc: Service) {} // <<< FAIL! Has no provider for Service!
}
bootstrap(MyComponent); // Removed [Service], now it lives in the component
With this Service is visible only to the component itself and its children
and all of them will share the same instance.
Well, again, what if I want my main component have one instance and its
children have another one? Very simple, you just override the instance by
specifying providers in the children component.
class Service {}
@Component({ providers : [Service] }) // Override parent's Service instance
class ChildCmp {
constructor(svc: Service) {} // This instance is not the same as the parent
}
@Component({ providers : [Service], directives : [ChildCmp] })
class MyComponent {
constructor(svc: Service) {}
}
In short : Just specify the Service once for the parent component and the
component itself and all of its children will share the same instance and
everytime you want a new instance just override it by passing it through
providers :D
I hope I was clear enough.
Read this article (I haven't read it, shame on me), but I'm pretty sure it
will clarify much more things for you
http://blog.thoughtram.io/angular/2015/05/18/dependency-injection-in-angular-2.html
--
You received this message because you are subscribed to the Google Groups
"AngularJS" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/angular.
For more options, visit https://groups.google.com/d/optout.