在将Flux模式与Angular一起使用时,关于智能和哑组件的讨论很多。
我最终使我的智能组件(例如ItemsListComponent
)“管理”应用程序状态(应用程序状态的一部分)。转储组件为ItemCardComponent
:
<div *ngFor="let item of state$.items | async">
<app-item-card [item]="item" (delete)="handleDelete($event)"></app-item-card>
</div>
我的ItemCardComponent
收到item
作为输入。但是然后,应该发出事件(方法A )还是自己触发操作(方法B )?
@Component({
selector: 'app-item-card',
template: `
<div>
{{ item.title }}
<button (click)="delete.emit(item.id)">Delete</button>
<button (click)="toggleFavorite(item.id)">Favorite</button>
</div>
`,
})
export class ItemCardComponent {
@Input()
item: any;
// Approach B
@Output()
delete: EventEmitter<number> = new EventEmitter();
// Approach A
toggleFavorite(id: number) {
// Assume that we have access the store here
this.store.dispatch({ type: '[Item] ToggleFavorite', payload: id });
}
}
使用方法A,您有很多样板代码(因为智能组件应处理事件,然后触发动作)。使用方法B,我们将转储组件耦合到状态。
答案 0 :(得分:0)