В одном из моих угловых компонентов у меня есть mat-list
, который я хочу использовать для отображения списка дочерних компонентов.Я хочу, чтобы пользователь мог добавить компонент в этот список, нажав кнопку под списком, и удалить компонент из списка, нажав кнопку удаления на самого компонента.
Для контекста создаваемый / удаляемый дочерний компонент является компонентом, который связан с хранением информации о диапазоне IP-адресов.Он содержит два входа, один для начального диапазона и один для конечного диапазона.
У меня работает функция добавления, но способ ее реализации не выглядит правильным.В настоящий момент у меня есть способ удержания массива объектов IpRange
(простой объект, содержащий две строки), а затем с помощью *ngFor
я генерирую новый компонент каждый раз, когда объект добавляется в этот массив.Компонент генерируется через @Input ipRange: IpRange
в дочернем компоненте.
Однако, когда я создаю экземпляры этих новых компонентов, я создаю их, передавая пустой массив в массив, который кажется неправильным.
ParentTemplate
<div class="row">
<div class="col-12">
<mat-list>
<app-add-ip-dialog *ngFor="let ipRange of ipRanges" [ipRange]="ipRange"></app-add-ip-dialog>
</mat-list>
</div>
</div>
ParentComponent
export class ParentComponent implements OnInit{
ipRanges: IpRange[];
constructor() {}
ngOnInit() {
this.ipRanges = [];
}
addIpRange(): void {
this.ipRanges.push({startingRange: '', endingRange: ''});
console.log(this.ipRanges);
}
}
ChildComponent
export class AddIpDialogComponent implements OnInit, OnChanges {
@Input() ipRange: IpRange;
constructor(){}
ngOnInit() {
}
ngOnChanges(changes: SimpleChanges): void {
console.log(this.ipRange.startingRange + ' : ' + this.ipRange.endingRange);
}
}
Интерфейс IpRange
export interface IpRange {
startingRange: string;
endingRange: string;
}
Что я хочучтобы быть в состоянии сделать, это создавать новый компонент каждый раз, когда пользователь нажимает кнопку добавления, тогда каждый компонент может отслеживать свои startingRange
и endingRange
посредством двусторонней привязки.
Затем, когда пользователь хочет удалить один из этих компонентов, ему просто нужно нажать кнопку удаления на компоненте, а затем он удаляет его из списка матов.