html - 如何在 Angular 中创建具有任意深度的文件夹结构?
问题描述
我创建了一个对象数组:
folders = [
{
id: 1,
folderName: "Folder1",
files: ["File 1", "File 2"],
folder: [
{
folderName: "Subfolder of folder1",
folder: []
}
]
},
{
id: 2,
folderName: "Folder2",
files: ["File 1", "File 2"],
folder: []
}
]
我想显示信息,还有子文件夹的信息作为文件夹名称下的子列表:
<ul *ngFor="let folder of folders">
<li> {{folder.id}} {{folder.folderName}}
<ul>
<li>{{folder.files}}</li>
</ul>
</li>
<ng-container *ngIf="!(folder.folder.length <= 0)">
<ul *ngFor="let folder2 of folder.folder">
<li>
{{folder2.id}} {{folder2.folderName}}
<ul>
<li>{{folder.files}}</li>
</ul>
</li>
</ul>
</ng-container>
</ul>
现在我想知道如何显示具有任意数量子文件夹的文件夹。在我的方法中,如果我想再往下一层,我总是必须添加代码,但这将是重复的。有没有其他方法可以解决这个问题?
解决方案
您可以使用递归组件。
首先你可以定义一个文件夹接口:
interface Folder {
id: number;
folderName: string;
files: string[];
folders: Folder[];
}
然后使用它来正确定义您的数据:
const folder: Folder = {
id: 0,
folderName: "Folder0",
files: ["File 1", "File 2"],
folders: [
{
id: 1,
folderName: "Folder1",
files: ["File 1", "File 2"],
folders: [
{
id:3,
files: ["File 1"],
folderName: "Subfolder of folder1",
folders: []
}
]
},
{
id: 2,
folderName: "Folder2",
files: ["File 1", "File 2"],
folders: []
}
]
};
然后创建一个组件来显示任何文件夹对象:
*.html
<h1>{{ folder.folderName }}</h1>
<ul>
<li *ngFor="let fileName of folder.files">
{{ fildeName }}
</li>
</ul>
<!-- Display subfolders -->
<display-folder *ngFor="let subFolder of folder.folders" [folder]="subFolder"></display-folder>
*.ts
@Component({
selector: 'display-folder',
...
})
export class DisplayFolder {
@Input() folder: Folder;
}
推荐阅读
- sass - 我可以使用 scss 更改 markdown 文件中代码框的样式吗?
- java - Java JNDI 不返回组的外部安全主体成员
- c# - 错误:字符串未被识别为有效的日期时间格式
- php - 在 php 和 mysql 中显示 Apr 02 的日期格式
- r - “predict.pca”不是从“命名空间:mdatools”导出的对象
- ffmpeg - fluent-ffmpeg 如何使视频渲染与代码同步?
- python - 如何将python文件中导入的库导入另一个python文件?
- verilog - 没有使用门级verilog代码在我的32位ALU中获得相关输出
- python - 重组数据框(可能是枢轴或反枢轴)以使每列显示基于 0 和 1 的数据标签
- git - git log range 排除多个基本引用的祖先