【发布时间】:2016-08-05 08:44:13
【问题描述】:
我正在编写一些具有不同容器重复部分的 Angular2 模板。在这种情况下,如果事物被分组并且启用了多部分模式,则视图可以更改。请原谅这个冗长的例子,但是像这样:
<template [ngIf]="isCategoryGrouped">
<div *ngFor="#categories of categories">
<div>{{ categories.category.name }}</div>
<div *ngFor="#thing of categories.things">
<label *ngIf="isMultiSelectMode">
<input type="checkbox" (change)="updateThingSelection(thing, $event)" />
<img [src]="thing.image" /> {{ thing.name }}
</label>
<a href="javascript: void(0)" (click)="selectThing(thing)" *ngIf="! isMultiSelectMode">
<img [src]="thing.image" /> {{ thing.name }}
</a>
</div>
</div>
</template>
<template [ngIf]="! isCategoryGrouped">
<div *ngFor="#thing of things">
<label *ngIf="isMultiSelectMode">
<input type="checkbox" (change)="updateThingSelection(thing, $event)" />
<img [src]="thing.image" /> {{ thing.name }}
</label>
<a href="javascript: void(0)" (click)="selectThing(thing)" *ngIf="! isMultiSelectMode">
<img [src]="thing.image" /> {{ thing.name }}
</a>
</div>
</template>
我真的很想重用其中的一部分,而不必编写一个完全独立的组件并将它们全部连接在一起,这需要一个 TypeScript 文件和一个模板。一种方法是使用本地组件,如下所示:
<sub-component selector="thing-list" things="input">
<div *ngFor="#thing of things">
<label *ngIf="isMultiSelectMode">
<input type="checkbox" (change)="updateThingSelection(thing, $event)"/>
<img [src]="thing.image" /> {{ thing.name }}
</label>
<a href="javascript: void(0)" (click)="selectThing(thing)" *ngIf="! isMultiSelectMode">
<img [src]="thing.image" /> {{ thing.name }}
</a>
</div>
</sub-component>
<template [ngIf]="isCategoryGrouped">
<div *ngFor="#categories of categories">
<div>{{ categories.category.name }}</div>
<thing-list things="categories.things" />
</div>
</template>
<thing-list [ngIf]="! isCategoryGrouped" things="things" />
我意识到上面是一个粗略的草图,可能无法按原样工作,但显然无法像这样重用视图的某些部分是不幸的。如果我理解正确的话,这种事情在 React 中非常简单。
我很好奇其他人解决视图重用问题的优雅方式,而无需编写新组件(然后我们的设计师需要了解和样式等... )。谢谢。
【问题讨论】:
-
我不清楚您希望以哪种方式重用视图的哪些部分。