我所試圖做的
我一票鑄造系統,這將在有關網頁的多個組件重用的工作。爲了保持乾燥,我想從任何組件創建投票組件到指定的DOM元素中。創建組件後,必須設置實例變量(在這種情況下,model:string
和pk:number
,都是公共的)。NG4 componentFactory將其放置在DOM對象
預期的結果
我希望組件在指定地點進行渲染,印刷工廠已創建的組件後立即在已經設定了正確的數據。在選票底部的輸出應該是Model: project PK: 1
實際情況
的ComponentFactory目前由組件工廠創建的投票分量輸出:
在正確的位置(目標div),但沒有設置實例變量。
在頁面的底部,但這是另一個問題,在以後的時間和其他主題。
某些代碼
@NgModule({
..
declarations: [
AppComponent,
ProjectComponent, // parent for voteContainer
VoteComponent, // Dynamic component
],
entryComponents: [
VoteComponent,
], ..
})
含有VoteComponent工廠父組件
export class ProjectDetailComponent implements AfterViewInit {
@ViewChild('voteComponentContainer', {read: ViewContainerRef}) voteComponentContainer;
public ngAfterViewInit() {
this.factoryVoteComponent();
}
private factoryVoteComponent() {
const voteComponentFactory = this.componentFactoryResolver.resolveComponentFactory(VoteComponent);
const voteComponentRef = this.viewContainerRef.createComponent(voteComponentFactory);
voteComponentRef.instance.model = "project";
voteComponentRef.instance.pk = 1;
voteComponentRef.changeDetectorRef.detectChanges();
}
}
動態分量目標:
<vote-component-container></vote-component-container>
基本投票元器件
@Component({
selector: 'vote-component-container',
templateUrl: 'vote.component.html',
})
export class VoteComponent {
public model:string;
public pk:number;
public constructor(){}
}
我已經試過
我一直在這個苦苦掙扎了好一陣子,所以有 相當一些嘗試,得到它的工作。最後的嘗試是 與工廠創建ViewChild。
除此之外,我一直在玩弄名稱,設置組件的模板接收不同的方式,等
我想問
有沒有人有任何的經驗是什麼針對我現在正在嘗試的情況使用動態組件?我希望能夠在正確的方向上推動如何解決在正確的位置渲染組件的問題,但沒有可用的屬性。
如果用在VoteComponent的默認值初始化變量,然後嘗試創建它,它的工作原理後,對其進行設置?例如---> public pk:number = 0; public model:string =''; <--- – diopside
另請注意,創建動態組件時,它們將創建爲用於放置它們的ViewContainerRef的* sibling *。不是小時候。因此,如果您使用ViewChild將它們放置在組件元素中,它將在該容器之後呈現,而不是在其中。當我第一次開始使用動態組件時,這引起了很多混亂! – diopside