@unifiedfactory/ng-metadata
Version:
Angular 2 decorators and utils for Angular 1.x
101 lines (67 loc) • 2.08 kB
Markdown
# Provider
Provider is just pure `ES2015 class` registered with `angular.provider` which has `$get` method, which returns new instance of service class.
> NOTE: you should use providers sparingly, because they don't exist in angular 2
> It is highly recommended to not use this Angular 1 obscure API construct because you have to use angular.module and deprecated provide to make it work
If you need to configure things, prefer creating configProvider functions, to set things up
**ES5**
```js
//droid.provider.js
angular.module('droid')
.provider('droidSvc', DroidProvider);
var droidName = 'bb-8';
DroidProvider.$inject = ['$logProvider'];
function DroidProvider($logProvider){
$logProvider.debugEnabled(true);
this.defaultName = function(name){
droidName = name;
};
this.$get = $get;
$get.$inject = ['$log'];
function $get($log){
return new DroidSvc($log);
}
}
function DroidSvc($log){
this.sayHi = function(){
$log.log(droidName + ' says hello!');
};
}
```
```js
// droid.js
angular.module('droid',[]);
```
**TS + ng-metadata**
```typescript
// droid.provider.ts
import { Inject } from 'ng-metadata/core';
let droidName = 'bb-8';
export class DroidProvider{
constructor( @Inject('$logProvider') private $logProvider: ng.ILogProvider ){
$logProvider.debugEnabled(true);
}
defaultName(name: string){
droidName = name;
}
$get(@Inject('$log') $log: ng.ILogService){
return new DroidSvc($log);
}
}
// export so we can use it for type annotations
export class DroidSvc{
constructor(private $log: ng.ILogService){}
sayHi(){
this.$log.log(`${droidName} says hello!`);
}
}
```
```typescript
// droid.ts
import * as angular from 'angular';
import {provide} from 'ng-metadata/core';
import {DroidProvider} from './droid.provider';
angular.module('droid',[])
// here we are using angular 2 like syntax registration
// because we don't want to register the service as 'DroidProvider' but as 'droidSvc'
.provider( ...provide('droidSvc', {useClass:DroidProvider}) );
```