Stackblitz: https://stackblitz.com/edit/angular-bsszc9?file=src/app/app.component.ts
Обратите внимание, что приведенный ниже код является быстрым примером техники, которую вы можете использовать.
Я дал тестам свойство isShown. Примечание. Эти тесты следует преобразовать в объекты с отдельным модулем.
panels = [{
CategoryId: "31b7a227-9fda-4d14-8e1f-1dee5beeccb4",
Id: "26cfdb68-ef69-4df0-b4dc-5b9c6501b0dd",
Name: "Celiac test",
Tests: [
{Id: "e2bb4607-c227-4483-a3e9-55c1bc5a6781",
Name: "test 1 (DGP) IgG",
isShown: true },
{
Id: "e2bb4607-c227-4483-a3e9-55c1bc5a6781",
Name: "test 2 (DGP) IgG",
isShown: true },
{
Id: "e2bb4607-c227-4483-a3e9-55c1bc5a6781",
Name: "test 3 (DGP) IgG",
isShown: true}
]
},
{
CategoryId: "31b7a227-9fda-4d14-8e1f-1dee5beeccb4",
Id: "26cfdb68-ef69-4df0-b4dc-5b9c6501b0dd",
Name: "Comprehensive test",
Tests: [
{Id: "e2bb4607-c227-4483-a3e9-55c1bc5a6781",
Name: "test 1 (DGP) IgG"},
{
Id: "e2bb4607-c227-4483-a3e9-55c1bc5a6781",
Name: "test 2 (DGP) IgG"},
{
Id: "e2bb4607-c227-4483-a3e9-55c1bc5a6781",
Name: "test 3 (DGP) IgG"}
]
}]
Когда вы щелкаете поле ввода, запускается событие щелчка, и для свойства test.isShown
устанавливается значение false
. *ngIf
скрыл бы тест от отображаемого кода. (обратите внимание, что я ввел новый ng-контейнер, потому что вы не можете использовать *ngFor
и *ngIf
в одном контейнере).
<ng-container *ngFor="let test of panel.Tests">
<div class="individual-panel" *ngIf='test.isShown'>
<span class="text-dimmed">{{test.Name}}</span>
<input type="checkbox" class="form-check-input ml-5" id="{{test.Id}}" name="{{test.Name}}" (click)="hide( test )" >
</div>
</ng-container>
Ниже приведен метод, который вызывается событием щелчка. В качестве альтернативы вы можете удалить test
из массива (это заставит ваш счетчик работать, но это может быть плохой идеей для удаления данных);
hide( test ) {
test.isShown = false;
}
В заключение отметим, что этот ответ покажет вам эту простую технику. Вы, очевидно, хотите провести рефакторинг в меньшие классы / модули и сделать это более удобным для обслуживания. Надеюсь, это поможет;).