Angular Services: Difference between revisions
Jump to navigation
Jump to search
Line 14: | Line 14: | ||
=Basic Service= | =Basic Service= | ||
==Service Code== | ==Service Code== | ||
This is the old way to register a service. We specify the @Injectable decorator with no arguments | |||
<syntaxhighlight lang="ts"> | <syntaxhighlight lang="ts"> | ||
import {Injectable} from '@angular/core' | import {Injectable} from '@angular/core' | ||
Line 29: | Line 30: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
The recommended way | |||
<syntaxhighlight lang="ts"> | |||
import {Injectable} from '@angular/core' | |||
@Injectable({ | |||
providedIn: 'root' | |||
}) | |||
export class LoggerService { | |||
... | |||
} | |||
</syntaxhighlight> | |||
==Registering the Service== | ==Registering the Service== | ||
'''This is not required''' provided you use the providedIn property in the @Injectable declaration and the benefit of not specifying it in the providers array is that the service is not compiled in if it is not determined as used. | '''This is not required''' provided you use the providedIn property in the @Injectable declaration and the benefit of not specifying it in the providers array is that the service is not compiled in if it is not determined as used. |
Revision as of 01:39, 8 September 2020
Introduction
A Service is
- Reusable piece of functionality
- Responsibility for sing piece of function
Create a Service if
- Not required by the view
- Business logic not used across components
- Share logic across components
Parts of a Service
- Class
- Injectable Decorator
- Provider, defined in the module as an array
Delivering to a component is simple
Basic Service
Service Code
This is the old way to register a service. We specify the @Injectable decorator with no arguments
import {Injectable} from '@angular/core'
@Injectable()
export class LoggerService {
log(message: string) : void {
const timeString : string = new Date().toLocaleTimeString()
console.log(`${message} (${timeString})`)
}
error(message: string) :void {
console.error(`ERROR: ${message}`)
}
}
The recommended way
import {Injectable} from '@angular/core'
@Injectable({
providedIn: 'root'
})
export class LoggerService {
...
}
Registering the Service
This is not required provided you use the providedIn property in the @Injectable declaration and the benefit of not specifying it in the providers array is that the service is not compiled in if it is not determined as used.
...
import { LoggerService } from './services/logger.service';
...
@NgModule({
declarations: [
...
],
imports: [
... ],
providers: [LoggerService],
...
Usage Of Service Code
class AComponent {
...
constructor(private loggerService : LoggerService) {}
..
this.loggerService.log("Whoopee!")