Я новичок в Angular, использую Angular 6.0.0-beta.
Я не могу добавить динамический компонент к динамической привязке, как описано ниже: -
Я поместил привязку (appContent) в HTML: -
<mat-card>
<mat-card-content>
<mat-tab-group class="tab-group" (selectedTabChange)="onTabChanged($event)">
<mat-tab *ngFor="let obj of tags">
<ng-template mat-tab-label>{{ obj.name }}</ng-template>
<div class="tab-content" appContent>
{{ obj.name }}
</div>
</mat-tab>
</mat-tab-group>
</mat-card-content>
</mat-card>
Я использую приведенный ниже код для добавления к ContentComponent в appContent, я не добавляю фрагмент кода, который создает TagId и Array (Content) Mapping: -
private tags: Array<Tag>;
private currentTag: Tag;
// private contents: Array<Content>;
private tagContentsMap: Map<number, Array<Content>>;
onTabChanged(event: MatTabChangeEvent) {
this.currentTag = this.tags[event.index]; // fetching current tag from the Tags Array
this.loadContentForTag(this.currentTag);
}
private loadContentForTag(tag: Tag) {
const componentFactory = this.componentFactoryResolver.resolveComponentFactory(ContentComponent);
const viewContainerRef = this.contentsDirective.viewContainerRef;
viewContainerRef.clear();
const componentRef = viewContainerRef.createComponent(componentFactory);
console.log(tag);
console.log(this.tagContentsMap.get(tag.tagId)); // I can see content array here on tab change
(<ContentComponent>componentRef.instance).contentList = this.tagContentsMap.get(tag.tagId); // On assigning content array here is not reflecting in the HTML of ContentComponent
}
ContentComponent, как показано ниже: -
import { Component, OnInit } from '@angular/core';
import { Content } from '../../models/flat/content';
@Component({
selector: 'app-content',
template: `
<p *ngFor="let content of contentList">
{{ content.title }}
</p>
`,
styleUrls: ['./content.component.scss']
})
export class ContentComponent implements OnInit {
contentList: Array<Content>;
constructor() { }
ngOnInit() {
}
}
Теперь проблема в том, что вкладки создаются динамически, а appContent зависит от текущей вкладки. Для первой автоматически выбранной вкладки ContentComponent отражает данные в (div class = "tab-content" appContent), но при смене вкладок не отражает данные текущей вкладки, даже если якорь (appContent) доступен.
Пожалуйста, помогите мне решить эту проблему.
Заранее спасибо.