Angular Services: Difference between revisions

From bibbleWiki
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!")