это не похоже на то, что требует от меня специальной директивы:
<div *ngFor="let item of items">
<h2 (click)="item.showData = !item.showData" >item.name</h2>
<custom_elem *ngIf="item.showData">somedata</custom_elem>
<div>
приведенный выше простой фрагмент кода, использующий директивы stock, кажется, соответствует требованиям ... если ваша цель - манипулировать видимость вместо добавления / удаления, вы могли бы просто использовать ngClass
вместо этого с классом для применения необходимых стилей ... есть ли конкретная c причина, по которой вы предпочитаете что-то более нестандартное, чем это? Обычно я поддерживаю dry директивы многократного использования, но в данном случае это кажется излишним.
Стандартные передовые методы работы с клиентами - это то, что ваша модель данных и модель представления связаны, но разные вещи. Каждая модель данных должна быть представлена в представлении, а модель данных почти никогда не бывает достаточной для моделирования представления, так как представление имеет такие вещи, как переключение скрытия / отображения или отображение значений, с которыми модель данных не связана. это нормально и ожидаемо.
, если у вас был интерфейс для вашей модели данных, такой как:
interface MyItem {
id: number;
user: {
firstName: string,
lastName: string
};
data: any;
}
, и вы хотите показать полное имя и переключатель открытия / закрытия, возможно, элемент может даже находиться в выбранном состоянии, вам нужно расширить эту модель, так как этого недостаточно для данного представления этих данных.
interface MyItemVm extends Item {
displayName: string;
selected: boolean;
showData: boolean;
}
, и вы построите модель представления с функцией что-то вроде:
this.itemVm = items.map(i => ({
...i,
...{displayName: `${i.user.firstName} ${i.user.lastName}`, selected: false, showData: false }
}));
теперь ваши данные правильно смоделированы для представления и легко переведены в шаблон с полезными свойствами для представления.