Укажите разные значения для каждого компонента для одной и той же службы - PullRequest
0 голосов
/ 10 июля 2020

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

У меня есть служба, которая проверяет цифры для меня (вызов метод, передавая di git, который следует проверить ...). Я хочу настроить проверку в зависимости от некоторой информации, которую я хочу передать службе. Нравится: Какой макс. количество цифр. Разрешены отрицательные значения. Я знаю, что могу передать эту информацию в метод проверки в качестве параметров, но я думал, есть ли что-то более глобальное?

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

 constructor(@Inject('negativeValues') @Optional() private negativeValues,
              @Inject('maxDigits') @Optional() private maxDigits) {}

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

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

Или есть лучший способ предоставить значения службе, не передавая их в метод?

1 Ответ

0 голосов
/ 10 июля 2020

Джулия, одна служба уникальна для всего приложения (ну, на самом деле это неправда, вы используете "provideIn" для создания службы для каждого модуля или приложения foreach)

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

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

@Injectable({
  providedIn: 'root', //<--here indicate if the service is unique
                      //for the application or if is for a module
})
export class DataService {

  constructor() { }
  formatNumber(negativeValues:boolean,negativeValues:number,maxDigits:number)
  {
         ....
         return result
  }
}

И вы вызываете из своего компонента, например,

  constructor(dataService:DataService){} //<--inject in constructor
  //in any time
  const result=this.dataService.formatNumber(true,2,3)

ПРИМЕЧАНИЕ: вы также можете иметь в .ts разные функции (используйте "экспорт" указать можно экспортировать)

export function formatNumber(negativeValues:boolean,negativeValues:number,maxDigits:number)
      {
             ....
             return result
      }
    }

И в компоненте

import { formatNumber} from "./myfunction"; //<--the file.ts where ou has the functions
//and in any where
const result=formatNumber(true,2,3)
...