Как разделить объекты между родственными компонентами, используя сервисы? - PullRequest
0 голосов
/ 23 сентября 2019

Мне нужно вызвать службу на компоненте, и в идеале эта служба будет извлекать информацию из двух или трех компонентов (которые уже связаны с базой данных и т. Д.).Мне нужно иметь возможность делиться объектами.

Я создал службу под названием DashService, например:

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

@Injectable({
  providedIn: 'root',
})
export class DashService {

  constructor() { }

}

Я связал ее с компонентом, который ее использует, а также импортировал и добавил имя службы вчасть «поставщиков» NgModule.Добавлено:

Import { OnInit } from '@angular/core';

и

implements OnInit{...}

на модуле, который будет отправлять информацию в сервис.

Я не знаю, как идти вперед.Как я могу поделиться объектом, который существует в компоненте, с моей службой?Я не могу правильно установить конструктор (для компонента, отправляющего информацию)

Когда я пытаюсь

public constructor( private DashService: DashService) 

, я получаю сообщение об ошибке, 'DashService относится к значению, но используется кактип '

Спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Поскольку вы называете услугу как тип услуги!

Просто измените название, обычно первая буква услуги указывается в нижнем регистре

public constructor( private dashService: DashService) 

https://angular.io/guide/component-interaction#parent-and-children-communicate-via-a-service здесь вы можете найти пример взаимодействия между компонентами. В общем, для родительских / дочерних компонентов вы можете использовать декоратор @Input / @Output.В других случаях вы можете воспользоваться услугой (или любым другим управлением штата)

0 голосов
/ 23 сентября 2019

Риккардо Гай прав, вы должны сделать это, чтобы использовать службу, public constructor( private dashService: DashService)

Но чтобы ответить на ваш вопрос, чтобы иметь возможность обмениваться данными между компонентами через службу, вы должны создатьобъект в этом сервисе, например публичный объект, тогда вы можете получить доступ к этому объекту через сервис.

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

@Injectable({
  providedIn: 'root',
})
export class DashService {

  objectToShareHere: any;

  constructor() { }

}

Я думаю, в любом случае, лучший способ для этого - иметь методы get и set и доступобъект через них (имеющий личный объект).Например:

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

@Injectable({
  providedIn: 'root',
})
export class DashService {

  private objectToShareHere: any;

  constructor() { }

  setPrivateObj(obj) {
     this.objectToShareHere = obj;
  }

  getPrivateObj() {
     return this.objectToShareHere;
  }

}

Если данные, которыми вы хотите поделиться, получены из BE, вы можете использовать объект Subject (см. Тема RxJs здесь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...