Создать единый экземпляр службы в Angular - PullRequest
1 голос
/ 29 мая 2019

пример кода для демонстрации: https://stackblitz.com/edit/angular-9zjkyf

Мне нужна глобальная общая служба, к которой можно получить доступ из любой части приложения, я следовал по документации:

https://angular.io/guide/singleton-services

Я настроил пример службы, которая генерирует случайное число, и при использовании в модулях я ожидаю, что любой компонент, вызывающий службу, получит один и тот же номер, но они разные, что заставляет меня думать, что существует несколькоэкземпляры моего сервиса

service.ts

import { Injectable,OnInit } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class UserService implements OnInit {

 random :number;

  constructor() {
    this.random = Math.random( );
   }
  ngOnInit() {

  }
}

component.ts

import { Component, OnInit } from '@angular/core';

import { UserService } from './user.service';
import { UserModule} from './user.module';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
  providers: [UserService]
})
export class AppComponent implements OnInit {
  title = 'Users list';
  users: User[];
  rand: number;

  constructor(private userService: UserService) { }

  ngOnInit(): void {

    this.rand = this.userService.random;
  }

}

1 Ответ

0 голосов
/ 29 мая 2019

@Jota.Teledo прав. Не помещайте сервис в массив Providers. Помещение этого там создает новый экземпляр на уровне компонента.

Просто поместите его в конструктор, и DI возьмет корневой, единственный экземпляр.

...