我有如下的自引用模型。如何在Angular 2中動態地使用routerlink生成html元素
export class Entity {
constructor(public id: number,public name: string,public children: Entity[]) {
}
}
我想創建一個樹列表,每個樹項目都有一個路由器鏈接。
我寫了一個遞歸函數,它用routerlinks生成所有節點。之後,我添加了我生成的最終html,以便掌握<ul>
元素。我正在使用JQuery來執行此操作。
這是ngOnInit函數。
ngOnInit() {
this.entityTree = this.fileOrganizationPlan.getEntityTree();
let $body = $('.FileOrganizationPlan', this.el.nativeElement); //this is master <ul> element
let html = { value: '' };
this.generateNavScript(this.entityTree, html);
$body.append(html.value);
}
這是生成樹項目的遞歸函數。
generateNavScript(entityTree: Entity[], html) {
for (let index = 0; index < entityTree.length; index++) {
let entity = entityTree[index];
html.value += `<li> <a routerLink="/file-organization-plan/` + entity.id + `" > </i> ` + entity.name + `</a>`;
if (entity.children) {
html.value += `<ul>`;
this.generateNavScript(entity.children, html);
html.value += `</ul>`;
}
html.value += `</li>`;
}
}
樹項出現,但路由不起作用。我猜角度不知道這個routerLink指令,因爲我在渲染後添加。也許我錯過了一些東西,但我無法理解這一點。那麼,如何做到這一點?
其實第一次我喜歡這樣。但在這種情況下,問題是我不知道實體模型樹中存在多少層。所以我應該循環Entity []數組和Entity.Children []也如果存在Entity.Children [0] .Children []我應該循環也爲他們的孩子。它是這樣的。實際上,我無法用ngFor來做到這一點。 – BlackEagle
對。我建議您在組件中使用遞歸函數來構建樹,然後遍歷它以從中構建一個數組。然後在你的ngFor中使用該數組 – GreyBeardedGeek