【发布时间】:2017-09-07 10:25:01
【问题描述】:
我有一项服务可以拉入菜单项列表并在 *ngFor 中加载这些项。菜单项列表还包括菜单项的状态。
服务
buttonlist = [
{id: 1, menu: 'me', status: 'active',children: 2,3,4 },
{id: 2, menu: 'home', status: 'nonactive'},
{id: 3, menu: 'contact', status: 'nonactive'},
{id: 4, menu: 'location', status: 'nonactive'}
];
组件
<ul>
<li *ngFor="let button of buttons " [ngClass]="'active' == buttons[subButton].status ? 'active' : 'hide'"
(click)="execCommand(button)"
>
{{button.id}}
<ul *ngFor="let subButton of button.children " >
<li
(click)="execCommand(button)"
[ngClass]="'active' == buttons[subButton].status ? 'active' : 'hide'"
>
{{buttons[subButton].status}} </li>
</ul>
</li>
</ul>
组件函数
execCommand(button){
button.status = 'non-active';
}
如果我记录按钮状态,它确实表明我已经更新了对象数据但它没有被渲染。如何使此按钮更新状态以显示活动类?
我的菜单基本上是 id 1 是顶级的,其余的是子级和 onclick 我想删除所有兄弟级子级的活动,并且只激活我单击的按钮,除非我单击顶级而不是只有顶部水平活跃和所有孩子。
- 1
- 2
- 3
- 4
我没有使用路由,因为我有一个页面应用程序具有多个级别的菜单项,如果用户单击它会加载一个选项卡。
【问题讨论】:
-
我创建了一个功能正常的 plunker,你能澄清一下你想要实现什么吗? plnkr.co/edit/wvDSzf2mHu39NLkVhc2I?p=preview
-
当用户点击兄弟姐妹(顶级或子级别)时,它会将其他兄弟姐妹变为无效,并将其单击的项目变为活动状态。
-
我更新了 plunker,使它看起来和你描述的很相似 plnkr.co/edit/wvDSzf2mHu39NLkVhc2I?p=preview
-
奇怪,如果我执行控制台日志,我会看到对象已更新,但在我的浏览器中它仍然显示为 false :(。您是否添加了任何特定内容以使其在浏览器上更新?
-
Karser,你能把它作为答案,我可以把它标记为正确答案。 ?
标签: angular data-binding ng-class