【发布时间】:2019-05-15 05:22:02
【问题描述】:
我尝试为导航菜单创建自定义 Angular 组件。这个菜单可以嵌套,所以它是二级菜单。这是它的外观:
app.component.html
<nav-menu>
<nav-menu-item>Section 1</nav-menu-item>
<nav-menu-item>Section 2
<nav-menu>
<nav-menu-item>Subsection 2.1</nav-menu-item>
<nav-menu-item>Subsection 2.2</nav-menu-item>
<nav-menu-item>Subsection 2.3</nav-menu-item>
</nav-menu>
</nav-menu-item>
<nav-menu-item>Section 3</nav-menu-item>
</nav-menu>
我已经创建了两个组件。
menu.component.ts
import { Component, HostBinding } from '@angular/core';
@Component({
selector: 'nav-menu',
template: '<ng-content select="nav-menu-item"></ng-content>',
styleUrls: ['./menu.component.css']
})
export class MenuComponent {
@HostBinding('class') class = 'nav-menu';
}
menu-item.component.ts
import { Component, HostBinding } from '@angular/core';
@Component({
selector: 'nav-menu-item',
template: '<ng-content></ng-content>',
styleUrls: ['./menu-item.component.css']
})
export class MenuItemComponent {
@HostBinding('class') class = 'nav-menu-item';
}
问题是子菜单必须有不同的样式。因此,如果菜单项是嵌套的(第二级),我必须有所不同。我可以使用这样的选择器.nav-item .nav-item {} 在 CSS 中解决这个问题,但最好为第一级和第二级菜单项设置不同的 CSS 类。
如果组件嵌套到自身,如何定义?
【问题讨论】:
-
你可以添加一个@Input level() 并且你的组件是 或
-
感谢您的回答,但是需要使用输入参数指定导航级别使得组件更加复杂。我找到了另一个解决方案。
标签: javascript html css angular