Ваше текущее решение полностью в порядке.Однако мы могли бы сделать это лучше, применив простой шаблон.Мы делим все наши компоненты на две категории: Контейнер и Презентационные компоненты.
В вашем случае SimpleCardComponent
должен быть Презентационный компонент . Презентационный компонент заботится только о том, как вещи выглядят, они получают данные от своих родителей и отображают их.
Предположим, что у нас есть Контейнерный компонент , вызывающий CardGroupComponent
, которыйявляется родителем SimpleCardComponent
в дереве компонентов.Как это:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-card-group',
template: `
<div>
<app-simple-card title="users" [content]="users"></app-simple-card>
<app-simple-card title="posts" [content]="posts"></app-simple-card>
</div>
`
})
export class CardGroupComponent implements OnInit {
users: number;
posts: number;
ngOnInit(): void {
// do some api calls and set the value
// for users and posts
}
}
Затем внутри SimpleCardComponent
мы могли бы получить эти переданные данные и отобразить их:
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-simple-card',
template: `
<div>
<h2>Title: {{title}}</h2>
<p>Content: {{content}}</p>
</div>
`
})
export class SimpleCardComponent {
@Input()
title: string;
@Input()
content: number;
}
Таким образом, мы можем легко повторно использовать наши компоненты.Тогда, если быть точным, ваш вопрос должен быть «Как эффективно использовать угловой компонент».
Это рабочий пример проекта на CodeSandbox: https://codesandbox.io/s/2opp3qn56y
Для получения дополнительной информации об этом простом шаблоне, вы можете взглянуть на этот удивительный пост от Дана Абрамова - Создатель Redux: https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0.Это часть этого поста:
Вы обнаружите, что ваши компоненты гораздо проще использовать и рассуждать, если вы разделите их на две категории.Я называю их Контейнерными и Презентационными компонентами *, но я также слышал «Толстый и Тощий», «Умный и тупой», «Состояния и чистота», «Экраны и компоненты» и т. Д. Они не совсем одинаковы, но основная идея схожа.