Я думаю, что лучшим решением было бы создание модели для вашего поля, например:
export interface FieldModel{
poolID: number;
isBomb:boolean;
isInfo:boolean;
isClickable:boolean;
touchesBombCount:boolean;
isMarkedAsBomb:boolean;
isExpanded:boolean;
isBombExpanded:boolean;
}
Теперь в вашем BoardComponent вы просто создадите объекты FieldModel и поместите их sh в список полей.
В шаблоне BoardComponent вы должны создать FieldComponent с помощью декларативного подхода в *ngFor
, перебирая FieldModels и передавая их в качестве входных свойств вашему FieldComponent.
Другое решение
Если вы хотите динамически создавать компоненты, как вы хотите с вашим FieldComponent внутри BoardComponent, вы должны использовать ComponentFactory
. Вам также понадобится ViewContainerRef
, где ваши компоненты могут визуализироваться внутри.
В шаблоне вашего BoardComponent вам нужен контейнер для ваших полей:
<ng-template #boardContainer></ng-template>
В BoardComponent вам нужно получите контейнер с помощью декоратора ViewChild и добавьте ComponentFactoryResolver:
export class BoardComponent implements OnInit {
...
@ViewChild('boardContainer',{read:ViewContainerRef,static:false}) boardContainer:ViewContainerRef;
constructor(private componentFactoryResolver:ComponentFactoryResolver) {
}
...
}
Теперь вы можете создавать FieldComponents, как показано ниже:
createFieldComponent(){
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(FieldComponent);
const componentRef:ComponentRef<FieldComponent> = this.boardContainer.createComponent(componentFactory);
}
Затем componentRef
предлагает вам доступ к экземпляру компонента.