要实现Angular中的自引用模板,可以使用递归组件的概念。以下是一个示例代码:
RecursiveComponent
的组件。recursive.component.ts:
import { Component, Input } from '@angular/core';
@Component({
selector: 'app-recursive',
template: `
{{ data }}
`,
})
export class RecursiveComponent {
@Input() data: any;
children: any[];
get hasChildren() {
return this.children && this.children.length > 0;
}
}
RecursiveComponent
。parent.component.ts:
import { Component } from '@angular/core';
@Component({
selector: 'app-parent',
template: `
`,
})
export class ParentComponent {
data = {
name: 'Parent',
children: [
{
name: 'Child 1',
children: [
{
name: 'Grandchild 1',
children: [],
},
{
name: 'Grandchild 2',
children: [],
},
],
},
{
name: 'Child 2',
children: [],
},
],
};
}
AppModule
中声明和导入RecursiveComponent
和ParentComponent
。app.module.ts:
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component';
import { RecursiveComponent } from './recursive.component';
import { ParentComponent } from './parent.component';
@NgModule({
declarations: [
AppComponent,
RecursiveComponent,
ParentComponent,
],
imports: [
BrowserModule,
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
AppComponent
的模板中放置app-parent
组件。app.component.html:
这样就实现了一个简单的自引用模板。在上述示例中,RecursiveComponent
接收一个名为data
的输入属性,该属性包含一个对象,其中包含一个名为children
的数组。如果children
数组不为空,递归地创建新的RecursiveComponent
实例以显示子元素的数据。