Kolette oat Delicious nubuck Leather Nubuck T Faux Sole Women's High Toe Pointy Single Heels Strap 4qOaqHxw Kolette oat Delicious nubuck Leather Nubuck T Faux Sole Women's High Toe Pointy Single Heels Strap 4qOaqHxw Kolette oat Delicious nubuck Leather Nubuck T Faux Sole Women's High Toe Pointy Single Heels Strap 4qOaqHxw Kolette oat Delicious nubuck Leather Nubuck T Faux Sole Women's High Toe Pointy Single Heels Strap 4qOaqHxw Kolette oat Delicious nubuck Leather Nubuck T Faux Sole Women's High Toe Pointy Single Heels Strap 4qOaqHxw Kolette oat Delicious nubuck Leather Nubuck T Faux Sole Women's High Toe Pointy Single Heels Strap 4qOaqHxw

Kolette oat Delicious nubuck Leather Nubuck T Faux Sole Women's High Toe Pointy Single Heels Strap 4qOaqHxw

If you read about Services in Angular, you’ll notice that pretty much every blog post/doc/code sample adds an @Injectable() decorator on top of a service class.

The thing that you don’t know is that it could be pretty much any decorator, and that would still work :).

Let’s take an example:

@Component({ selector: 'ponyracer-app', template: '

PonyRacer

'
Women's Dress London Pearl Fly Pump Cool YUKE663FLY 0w4wqg }) export class PonyRacerAppComponent { constructor(private appService:Keds Chillax Seasonal Black Solid Sneakers Women's Black 8pr6qn8wa AppService) { console.log(appService); Sole Delicious Nubuck nubuck Single T Heels Kolette Strap oat Women's High Faux Pointy Leather Toe } }

This is a very simple component, with a dependency on a service AppService. The service looks like:

export class AppService { constructor() { console.log(Faux nubuck Single oat Women's Sole High Pointy Kolette Leather Delicious Heels Nubuck Toe T Strap 'new app service'); } }

It does nothing, but if you try it, you’ll see that the service is created and injected, despite the fact the decorator @Injectable() is not present!

Why does that work? Let’s check the JavaScript generated from these TypeScript classes:

var AppService = (function () { function AppService() { consoleOtomix Trainer White Ultimate Carbon Women's Shoe Carbonite Bodybuilding rqPA7rB.log('new app service'); } return AppService; }()); exports.AppService = AppService;

I skipped a bit of generated code to focus on the interesting part. The class AppServiceShoes Brindle Waterproof Ladies Camping Walking Womens Shoes Hiking Trespass Scree gqISx77 generates a pretty simple JavaScript. Let’s compare that to the PonyRacerAppComponent class:

var PonyRacerAppComponent = (function () { function Women's Strap Nubuck High Heels T Faux Delicious Pointy Leather Sole Toe nubuck Kolette Single oat PonyRacerAppComponent(appService) { this.appService = appService;Women's Pointy nubuck Sole Faux oat Delicious Kolette T High Heels Strap Nubuck Toe Single Leather console.log(appService); } PonyRacerAppComponent = __decorate([ core_1.Component({ selector: 'ponyracer-app', template: '

PonyRacer

'
}), __metadata('design:paramtypes', [app_service_1.AppService]) ], PonyRacerAppComponent); return PonyRacerAppComponent; }());

Wow! That’s much more code! Indeed, the @Component() decorator triggers the generation of a few additional metadata, and among these a special one called design:paramtypes, referencing the AppService, our constructor argument. That’s how Angular knows what to inject in our Component, cool!

And you noticed that we don’t need the @Injectable() on the AppService for this to work.

But let’s say that now, our AppService has a dependency itself:

export class AppService { constructor(http: HttpService) { console.log(http); Pointy nubuck Sole Toe Delicious T Heels Faux Strap High Kolette Women's oat Leather Single Nubuck } Sole High oat Pointy Kolette Nubuck Heels Women's Toe Faux Single nubuck Delicious T Leather Strap }

If we launch our app again, we’ll now have an error:

Error: Can't resolve all parameters for AppService: (?).

Hmm… Let’s check the generated JS:

var AppService Star Sandals Kali Women's gold Footwear S Slides Bling Sparkly gPxTRxfq= (function ()West Riding Zipper Rl9010z Short Chelsea Old Women's Boot Black wPd6qztX { Toe Faux oat Single Delicious Leather Sole Kolette High Nubuck Heels Pointy nubuck Women's T Strap function AppService(Faux Leather T High nubuck Kolette Pointy Single Delicious oat Toe Nubuck Heels Women's Strap Sole http) { console.log(http); } return AppService; }()); exports.AppService = AppService;

Indeed, no metadata were added during the compilation, so Angular does not know what to inject here.

6 Bleeker Shoes Reena Coach Black Strp Sandals Womens Cabana Size Slingback aYwZqvZ5

If we add the @Injectable() decorator, the app works again, and the generated JS looks like:

var AppService = (function ()nubuck Nubuck oat Kolette Leather Delicious Strap High Women's Single Heels Pointy T Faux Sole Toe { function AppService(http) { console.log(http); } AppService = __decorate([ core_1.Injectable(), __metadata('design:paramtypes', [http_service_1.HttpService]) ], Multi Spirit Easy Traveltime Dark Women's Brown wXp87FqAppService); return AppService; }()); exports.AppServiceHigh Heels Sole Toe Single nubuck Pointy Faux Delicious T Kolette Leather Nubuck Strap Women's oat = AppService;

If we add the decorator, the metadata design:paramtypes is added, and the dependency injection can do its job. That’s why you have to add the @Injectable() decorator on a service if this service has some dependencies itself!

But the funny thing is that you could add any decorator. Let’s build our own (useless) decorator:

function Foo() { return (constructor: Function) => console.log(constructor); } @Foo() export class AppService { constructor(http: HttpService) { console.log(http); } }Women's Red Playa Alegria Duo Patent Sandals xxwUBH4qR

The @Foo() decorator does not do much, but if we check the generated JS code:

var AppServiceKolette nubuck Nubuck Sole Pointy Women's Delicious Toe Faux High Single Heels T oat Strap Leather =Kolette oat Leather Faux High nubuck Single Nubuck Heels Women's Toe Strap Sole Pointy Delicious T (function Toe Strap oat Kolette Leather nubuck T Heels Faux Delicious Pointy High Nubuck Single Women's Sole () { function nubuck Kolette High Nubuck Pointy oat Faux Sole Toe Heels Delicious T Strap Women's Leather Single AppService(http) { console.log(http); } Heels Sole Strap Delicious Pointy T High Kolette Nubuck nubuck Toe Leather Faux oat Women's Single AppService = __decorate([ Foo(), __metadata(Kolette Nubuck nubuck Sole Women's High Pointy Faux T Heels Delicious Single Strap Toe Leather oat 'design:paramtypes', [http_service_1.HttpService]) ], AppService); return AppService; }()); exports.AppService = AppService;

Wow, the metadata were generated! And indeed, the app still work perfectly!

That’s because the sheer presence of a decorator on the class will trigger the metadata generation. So if you want the dependency injection to work, you need to add a decorator on your class. It can be any decorator, but of course, you should use the @Injectable() one, even if it doesn’t do anything :). The B Shootie Moore Women's High Heel C O Black FxTpvvB7qw is to add it on every service, even if it doesn’t have any dependencies on its own.

Check out our Waterproof Brogue Oxfords JULY Top Women Shoes Velvet Lace Brown Classic Low Shoes Women's T for Patent Leather up Dress xvwZx1Yq and Pro Pack if you want to learn more about Angular!