Угловой 7, Угловой материал 7
GalleryComponent, где изображения перечислены и пользователь может выбрать некоторые из них:
@Component({
selector: 'app-gallery',
template: `
<mat-card *ngFor="let file of files" (click)="toggleSelect(file)">
<img mat-card-image [src]="file.url">
</mat-card>
`
})
export class GalleryComponent {
selected: Array<FileDetails> = [];
files: Array<FileDetails> = [{url: 'someurl1'}, {url: 'someurl2'}];
toggleSelect(file: FileDetails): void {
const indexInArray = this.selected.findIndex(f => f === file);
indexInArray !== -1 ? this.selected.splice(indexInArray, 1) : this.selected.push(file);
}
}
В другом компоненте (PartnersEditTableComponent)Я хотел бы повторно использовать Компонент галереи в шаблоне, открывающемся в модальном / диалоговом окне (Angular Material Dialog).
@Component({
selector: 'app-partners-edit-table',
template: `
<button mat-icon-button (click)="openGallery()">
<mat-icon>collections</mat-icon>
</button>
<ng-template #galleryModal>
<h2 mat-dialog-title>Gallery</h2>
<mat-dialog-content>
<ng-container *ngComponentOutlet="GalleryComponent"></ng-container>
</mat-dialog-content>
<mat-dialog-actions align="end">
<button mat-raised-button [mat-dialog-close]="false">Close</button>
<button mat-raised-button color="primary" [mat-dialog-close]="GalleryComponent.selected">Select</button>
</mat-dialog-actions>
</ng-template>
`
})
export class PartnersEditTableComponent {
@ViewChild('galleryModal') private readonly galleryModal;
GalleryComponent = GalleryComponent;
constructor(private matDialog: MatDialog) {
}
openGallery(): void {
this.matDialog.open(this.galleryModal).afterClosed().subscribe((selectedItems) => {
if (selectedItems) {
// do something with selectedItems array
}
});
}
}
Если пользователь нажимает кнопку «Выбрать» в диалоговом окне, я хочуполучить "выбранный" массив, например:
[mat-dialog-close]="GalleryComponent.selected"
->
this.matDialog.open(this.galleryModal).afterClosed().subscribe((selectedItems) => {
if (selectedItems) {
// do something with selectedItems array
}
});
Возможно ли это как-то сделать?