Home > Back-end >  Angular public service
Angular public service

Time:03-07

I want to use a value coming from a service into my HTML.

import { Injectable } from '@angular/core';
@Injectable()
export class DataService {
  foo =  'Foo';
}

Most examples I found use private service

import { Component } from '@angular/core';
import { DataService } from './data.service';

@Component({
  selector: 'my-app',
  template: '{{foo}}',
})

export class AppComponent {
  get foo() { return this.dataService.foo; }
  constructor(private dataService: DataService) {}
}

I am wondering why not declare the service as Public to avoid the getter

import { Component } from '@angular/core';
import { DataService } from './data.service';

@Component({
  selector: 'my-app',
  template: '{{dataService.foo}}',
})

export class AppComponent {
  constructor(public dataService: DataService) {}
}

CodePudding user response:

This is a basic encapsulation problem https://en.wikipedia.org/wiki/Encapsulation_(computer_programming). Best practice is to set services as private because each module has a role :

  • Service provide utils functions
  • Component use the service to perform operations

You can also check this topic for more information : Typescript dependency injection public vs private

  • Related