如何 ngFor 一个数组 object 包含一个包含 objects 的数组的键?
How to ngFor an array with an object that contains a key with an array that contains objects?
我正在尝试遍历一个数组,该数组包含一个键和一个以 objects 作为值的数组。这是包含数组的组件
sidemenu-links.ts
import { SideMenuLink } from './sidemenu-link';
export const SIDEMENULINKS: SideMenuLink[] = [
{
"linkTitle": "Getting Started",
"linkRoute": "introduction",
"subLinks": [
{
"linkTitle": "Introduction",
"linkRoute": "introduction"
},
{
"linkTitle": "Download",
"linkRoute": "download"
},
{
"linkTitle": "Contents",
"linkRoute": "contents"
},
{
"linkTitle": "Browser & devices",
"linkRoute": "browser-and-devices"
},
{
"linkTitle": "JavaScript",
"linkRoute": "javascript"
},
{
"linkTitle": "Theming",
"linkRoute": "theming"
},
{
"linkTitle": "Build tools",
"linkRoute": "build-tools"
},
{
"linkTitle": "Webpack",
"linkRoute": "webpack"
},
{
"linkTitle": "Accessibility",
"linkRoute": "accessibility"
}
]
},
{
"linkTitle": "Layout",
"linkRoute": "layout",
"subLinks": []
},
{
"linkTitle": "Content",
"linkRoute": "content",
"subLinks": []
},
{
"linkTitle": "Components",
"linkRoute": "components",
"subLinks": []
},
{
"linkTitle": "Utilities",
"linkRoute": "utilities",
"subLinks": []
},
{
"linkTitle": "Extend",
"linkRoute": "extend",
"subLinks": []
},
{
"linkTitle": "Migration",
"linkRoute": "migration",
"subLinks": []
},
{
"linkTitle": "About",
"linkRoute": "about",
"subLinks": []
},
]
这是sidemenu.component
sidemenu.component.ts
import { Component, OnInit } from '@angular/core';
import { NavLink } from '../nav-link';
import { SIDEMENULINKS } from '../sidemenu-links';
@Component({
selector: 'app-sidemenu',
templateUrl: './sidemenu.component.html',
styleUrls: ['./sidemenu.component.scss']
})
export class SidemenuComponent implements OnInit {
sideMenuLinks = SIDEMENULINKS;
linkSelected: NavLink;
constructor() { }
expandLink(link:any): void {
this.linkSelected = link;
}
ngOnInit() {
}
}
这是我尝试使用 *ngFor
的 sidemenu.component.html
sidemenu.component.html
<div class="side-menu-container #sidemenucontainer">
<ul>
<li *ngFor="let link of sideMenuLinks">
<div class="nav-link" [class.selected]="link === linkSelected" (click)="expandLink(link)">{{link.linkTitle}}</div>
<div *ngIf="link === linkSelected">
<div class="nav-link" *ngFor="let link of sideMenuLinks">{{link.subLinks.linkTitle}}</div>
</div>
</li>
</ul>
</div>
当我 运行 它并单击它打开的任何侧边链接时,链接标题为
,但 的文本是全部空白。
您只需在嵌套的 *ngFor
中包含 subLinks
数组。这是使用您的对象结构和 html.
的代码的简化 StackBlitz Demo
<div class="side-menu-container #sidemenucontainer">
<ul>
<li *ngFor="let link of sideMenuLinks">
<div class="nav-link" [class.selected]="link === linkSelected" (click)="expandLink(link)">{{link.linkTitle}}</div>
<div *ngIf="link === linkSelected">
<div class="nav-link" *ngFor="let sub of link.subLinks">{{sub.linkTitle}}</div>
</div>
</li>
</ul>
</div>
我正在尝试遍历一个数组,该数组包含一个键和一个以 objects 作为值的数组。这是包含数组的组件
sidemenu-links.ts
import { SideMenuLink } from './sidemenu-link';
export const SIDEMENULINKS: SideMenuLink[] = [
{
"linkTitle": "Getting Started",
"linkRoute": "introduction",
"subLinks": [
{
"linkTitle": "Introduction",
"linkRoute": "introduction"
},
{
"linkTitle": "Download",
"linkRoute": "download"
},
{
"linkTitle": "Contents",
"linkRoute": "contents"
},
{
"linkTitle": "Browser & devices",
"linkRoute": "browser-and-devices"
},
{
"linkTitle": "JavaScript",
"linkRoute": "javascript"
},
{
"linkTitle": "Theming",
"linkRoute": "theming"
},
{
"linkTitle": "Build tools",
"linkRoute": "build-tools"
},
{
"linkTitle": "Webpack",
"linkRoute": "webpack"
},
{
"linkTitle": "Accessibility",
"linkRoute": "accessibility"
}
]
},
{
"linkTitle": "Layout",
"linkRoute": "layout",
"subLinks": []
},
{
"linkTitle": "Content",
"linkRoute": "content",
"subLinks": []
},
{
"linkTitle": "Components",
"linkRoute": "components",
"subLinks": []
},
{
"linkTitle": "Utilities",
"linkRoute": "utilities",
"subLinks": []
},
{
"linkTitle": "Extend",
"linkRoute": "extend",
"subLinks": []
},
{
"linkTitle": "Migration",
"linkRoute": "migration",
"subLinks": []
},
{
"linkTitle": "About",
"linkRoute": "about",
"subLinks": []
},
]
这是sidemenu.component
sidemenu.component.ts
import { Component, OnInit } from '@angular/core';
import { NavLink } from '../nav-link';
import { SIDEMENULINKS } from '../sidemenu-links';
@Component({
selector: 'app-sidemenu',
templateUrl: './sidemenu.component.html',
styleUrls: ['./sidemenu.component.scss']
})
export class SidemenuComponent implements OnInit {
sideMenuLinks = SIDEMENULINKS;
linkSelected: NavLink;
constructor() { }
expandLink(link:any): void {
this.linkSelected = link;
}
ngOnInit() {
}
}
这是我尝试使用 *ngFor
的 sidemenu.component.htmlsidemenu.component.html
<div class="side-menu-container #sidemenucontainer">
<ul>
<li *ngFor="let link of sideMenuLinks">
<div class="nav-link" [class.selected]="link === linkSelected" (click)="expandLink(link)">{{link.linkTitle}}</div>
<div *ngIf="link === linkSelected">
<div class="nav-link" *ngFor="let link of sideMenuLinks">{{link.subLinks.linkTitle}}</div>
</div>
</li>
</ul>
</div>
当我 运行 它并单击它打开的任何侧边链接时,链接标题为
您只需在嵌套的 *ngFor
中包含 subLinks
数组。这是使用您的对象结构和 html.
<div class="side-menu-container #sidemenucontainer">
<ul>
<li *ngFor="let link of sideMenuLinks">
<div class="nav-link" [class.selected]="link === linkSelected" (click)="expandLink(link)">{{link.linkTitle}}</div>
<div *ngIf="link === linkSelected">
<div class="nav-link" *ngFor="let sub of link.subLinks">{{sub.linkTitle}}</div>
</div>
</li>
</ul>
</div>