В большинстве моих компонентов я использую FontAwesome и объявляю их для использования следующим образом.
import * as fa from "@fortawesome/free-solid-svg-icons";
...
@Component({ ... })
export class SomeComponent implements OnInit {
constructor(private service: SirService) { }
add = fa.faPlus;
...
}
}
В реальном шаблоне у меня есть что-то вроде этого.
<fa-icon [icon]="add" ...></fa-icon>
Теперь я хочу централизовать управление значками и передать его службе, чтобы вместо этого получить их, используя следующий синтаксис:
constructor(private sir: SirService) { }
add = this.sir.willGiveMeIconFor("add"); ...
Пока что все для меня очевидно. Теперь, однако, я не могу решить, следует ли мне полагаться на назначение, как показано выше, или, скорее, предоставлять весь сервис шаблону. Так как я должен сделать сервис общедоступным для шаблона, чтобы увидеть его, мне придется использовать что-то вроде этого.
constructor(private sir: SirService) { this source = sir; }
public icons: SirService;
//add = this.sir.willGiveMeIconFor("add"); ...
И в шаблоне (после переименования метода в сервисе, чтобы сделать лучше семантика, конечно).
<fa-icon [icon]="icons.show('add')" ...></fa-icon>
Мне сказали, что объявление службы как publi c в конструкторе - плохая практика. Я также чувствую, что я держу несколько ссылок на него без видимой причины. Поскольку я не делал ничего, используя эту стратегию, я чувствую осторожность, чтобы не забежать дальше, ударив стену дальше.
Я также подумал об использовании совершенно другого подхода - например, с помощью директивы или трубы. Тем не менее, я не чувствую себя достаточно уверенно, чтобы принять решение. Поскольку такая реконструкция была бы довольно обширной, я предпочитаю понять теорию до того, как я go приступлю к ее реализации.
Самым близким к моей проблеме, которую я нашел, был этот ответ , но это даже не достаточно информативно, чтобы облегчить мое беспокойство.