Size: a a a

Angular - русскоговорящее сообщество

2019 October 22

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
Yuri Katkov
ребята, в каком случае вы используете ангуляр-сервисы, а в каком - можно обойтись просто висящей где-то в воздухе функцией? Вот например, есть у меня функция, форматирующая список лекарств. Пока что она сидит внутри компонента:
export class DrugsShortComponent implements OnInit {

 @Input()
 drugs: Drug[];

 drugsFormatted: string;

 constructor() {
 }

 ngOnInit() {
   this.drugsFormatted = this.formatDrugs();
 }

 private formatDrugs(): string {
   return this.drugs.length ? this.drugs
     .map(drugFullName => drugFullName.substring(0, 3))
     .join(', ') : 'No drugs given';
 }
}


Мне, понятное дело, хочется ее тестировать удобно, плюс я читал, что вся логика должна быть  в сервисах, а компоненты должны быть тупенькие
1) Надо создать stateless DrugFormattingService с единственной функцией?
2) надо просто сделать ее статической и оставить в классе компонента?
3) надо просто сделать ее свободной функцией и оставить в файле компонента?
в сервисы в основном кидают запросы на бэк и их обработку. В твоем случае, если ты юзаешь метод на форматирование какого массива и только в этом компоненте, то все ок. если такой же или подобный метод юзается где-то еще - можна подумать о каком-то классе utils, куда кинуть шаред логику.
источник

VB

Valentin Buryakov in Angular - русскоговорящее сообщество
Yuri Katkov
ребята, в каком случае вы используете ангуляр-сервисы, а в каком - можно обойтись просто висящей где-то в воздухе функцией? Вот например, есть у меня функция, форматирующая список лекарств. Пока что она сидит внутри компонента:
export class DrugsShortComponent implements OnInit {

 @Input()
 drugs: Drug[];

 drugsFormatted: string;

 constructor() {
 }

 ngOnInit() {
   this.drugsFormatted = this.formatDrugs();
 }

 private formatDrugs(): string {
   return this.drugs.length ? this.drugs
     .map(drugFullName => drugFullName.substring(0, 3))
     .join(', ') : 'No drugs given';
 }
}


Мне, понятное дело, хочется ее тестировать удобно, плюс я читал, что вся логика должна быть  в сервисах, а компоненты должны быть тупенькие
1) Надо создать stateless DrugFormattingService с единственной функцией?
2) надо просто сделать ее статической и оставить в классе компонента?
3) надо просто сделать ее свободной функцией и оставить в файле компонента?
Для этого случая хорошим вариантом будет пайп. Плюсы в том что не надо будет инжектить никудаи потом широко переиспользовать
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Valentin Buryakov
Для этого случая хорошим вариантом будет пайп. Плюсы в том что не надо будет инжектить никудаи потом широко переиспользовать
А я уже и не думаю, что это функция хорошая. Выдаёт какие-то непонятные запятые вперемешку с данными.
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Сегодня я форматирую запятыми, завтра захочу ul ами, послезавтра захочу лекарства как-то красить в зависимости от их категории, а тут у меня осталась строка.
источник

AS

Anton Shvets in Angular - русскоговорящее сообщество
Yuri Katkov
ребята, в каком случае вы используете ангуляр-сервисы, а в каком - можно обойтись просто висящей где-то в воздухе функцией? Вот например, есть у меня функция, форматирующая список лекарств. Пока что она сидит внутри компонента:
export class DrugsShortComponent implements OnInit {

 @Input()
 drugs: Drug[];

 drugsFormatted: string;

 constructor() {
 }

 ngOnInit() {
   this.drugsFormatted = this.formatDrugs();
 }

 private formatDrugs(): string {
   return this.drugs.length ? this.drugs
     .map(drugFullName => drugFullName.substring(0, 3))
     .join(', ') : 'No drugs given';
 }
}


Мне, понятное дело, хочется ее тестировать удобно, плюс я читал, что вся логика должна быть  в сервисах, а компоненты должны быть тупенькие
1) Надо создать stateless DrugFormattingService с единственной функцией?
2) надо просто сделать ее статической и оставить в классе компонента?
3) надо просто сделать ее свободной функцией и оставить в файле компонента?
сервис с единственной функцией это вполне нормально.
Пайп тут явно не нужен и вообще это больше смахивает на rxjs оператор.
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
Yuri Katkov
Сегодня я форматирую запятыми, завтра захочу ul ами, послезавтра захочу лекарства как-то красить в зависимости от их категории, а тут у меня осталась строка.
лекарства то medicine, а тут имеем дело с drugs😁
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Valentin Buryakov
Для этого случая хорошим вариантом будет пайп. Плюсы в том что не надо будет инжектить никудаи потом широко переиспользовать
почему пайп, а не статическая функция, вызываемая в конструкторе? Ее вроде тоже не инжектят.
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Vladyslav Hrehul
лекарства то medicine, а тут имеем дело с drugs😁
Мы вам не "Релакс", а уважаемая компания!
источник

VH

Vladyslav Hrehul in Angular - русскоговорящее сообщество
Yuri Katkov
Мы вам не "Релакс", а уважаемая компания!
также pharmacy есть
источник

D

DAVID in Angular - русскоговорящее сообщество
DrugStore правильно!
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Anton Shvets
сервис с единственной функцией это вполне нормально.
Пайп тут явно не нужен и вообще это больше смахивает на rxjs оператор.
а как насчет просто статической функции или просто export function? Я вот не вкумекаю, что прекрасного нам  DI может принести в данном случае? И почему rxjs оператор, мы ж тут не про потоки данных во времени, а просто про обрезание и расстановку запятых.
источник

AS

Anton Shvets in Angular - русскоговорящее сообщество
Yuri Katkov
а как насчет просто статической функции или просто export function? Я вот не вкумекаю, что прекрасного нам  DI может принести в данном случае? И почему rxjs оператор, мы ж тут не про потоки данных во времени, а просто про обрезание и расстановку запятых.
сложнее мокнуть. сервис очевидно относится к компоненту, фактически его часть. красивее
оператор потому что это похоже на поток от бэка. Просто скорее всего ты его преждевременно перевел в плейн дату.
источник

V

Vadim in Angular - русскоговорящее сообщество
Yuri Katkov
ребята, в каком случае вы используете ангуляр-сервисы, а в каком - можно обойтись просто висящей где-то в воздухе функцией? Вот например, есть у меня функция, форматирующая список лекарств. Пока что она сидит внутри компонента:
export class DrugsShortComponent implements OnInit {

 @Input()
 drugs: Drug[];

 drugsFormatted: string;

 constructor() {
 }

 ngOnInit() {
   this.drugsFormatted = this.formatDrugs();
 }

 private formatDrugs(): string {
   return this.drugs.length ? this.drugs
     .map(drugFullName => drugFullName.substring(0, 3))
     .join(', ') : 'No drugs given';
 }
}


Мне, понятное дело, хочется ее тестировать удобно, плюс я читал, что вся логика должна быть  в сервисах, а компоненты должны быть тупенькие
1) Надо создать stateless DrugFormattingService с единственной функцией?
2) надо просто сделать ее статической и оставить в классе компонента?
3) надо просто сделать ее свободной функцией и оставить в файле компонента?
Простейшее объяснение: в компонентах хранится то, что взаимодействует с template. В сервисах всё остальное.
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Vadim
Простейшее объяснение: в компонентах хранится то, что взаимодействует с template. В сервисах всё остальное.
в таком случае, форматирование запятых надо сделать не через join, а в шаблоне ngFor'ом. А обрезалку до трех букв вынести в пайп или в сервис.
источник

V

Vadim in Angular - русскоговорящее сообщество
Yuri Katkov
в таком случае, форматирование запятых надо сделать не через join, а в шаблоне ngFor'ом. А обрезалку до трех букв вынести в пайп или в сервис.
Всё верно
источник

KK

Kseniia Koparos in Angular - русскоговорящее сообщество
Yuri Katkov
народ, а есть такой оператор в rx, чтобы он работал как filter., но вместо одной обзерваблы выдавал мне две - одна, удовлетворяющая условию фильтра, а другая - не удовлетворяющая?
источник

V

Vadim in Angular - русскоговорящее сообщество
Хотя в данном случае выносить в сервис может быть переусложнением. Если в сервисе будет одна лишь эта функция.
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
нене, partition там зашел идеально
источник

YK

Yuri Katkov in Angular - русскоговорящее сообщество
Vadim
Хотя в данном случае выносить в сервис может быть переусложнением. Если в сервисе будет одна лишь эта функция.
значит пайп-сокращалка одного драга с параметром до скольки букв сокращать. И в ngFor его
источник

AS

Anton Shvets in Angular - русскоговорящее сообщество
кстати вообще не понял смысла iif. заменяется тернарным оператором как правило.
источник