![](/img/trans.png)
[英]How can I create a custom angular directive to show and hide child element when clicked on neighbour element?
[英]How can I remove (not hide) an Angular child element from DOM when it raises an event?
我正在通过*ngFor
指令创建一个子元素列表(不是与ComponentFactory)这样的东西:
<ul class="nav navbar-nav">
<top-menu #topmenu *ngFor="let menu of menus" (onDeleteMe)="handleDeleteMenu($event)">
</top-menu>
</ul>
现在我想handleDeleteMenu
从DOM中删除组件。 这有可能吗? 或者我应该更改模板以使用组件工厂创建组件?
您可以将ngFor迭代的索引传递给onDeleteMe方法
<top-menu #topmenu *ngFor="let menu of menus; let i = index" (onDeleteMe)="handleDeleteMenu($event, i)">
然后在你的方法中拼出迭代
handleDeleteMenu(event, index){
this.menus.splice(index, 1);
}
这将从您的数组中删除该特定迭代并重新呈现ngFor。 这是一个演示插件https://plnkr.co/edit/qphEdumLB7Eenb3FPtL5?p=preview
你需要在ngFor中添加一个额外的div,一个索引,并在内部元素中添加一个ngIf:
<ul class="nav navbar-nav">
<ng-container *ngFor="let menu of menus; let i = index;">
<top-menu
#topmenu
(onDeleteMe)="handleDeleteMenu($event);showMenu[i]=false;"
*ngIf="showMenu[i]">
</top-menu>
</ng-container>
</ul>
在你的组件打字稿中,在onInit中添加一个show index:
showMenu = []
ngOnInit() {
for( let i = 0; i < this.menus; i++ ) {
this.showMenu.push(true);
}
}
您也可以向this.menus
添加一个新对象,而不是创建showMenu
。
对的,这是可能的。 但首先你不应该这样给予this.menus
。 它应该是*ngFor="let menu of menus"
。 在handleDeleteMenu()
函数中,从menus
数组中弹出元素。 ngFor
指令将使用新的元素数组自动重新呈现。
* ngIf从dom树中删除dom元素,但不能在同一标记中使用* ngFor和* ngIf。 您可以创建另一个标记并将* ngIf放在您的内部
<ul class="nav navbar-nav">
<div *ngIf="menus && menu.length > 0">
<top-menu #topmenu *ngFor="let menu of menus" (onDeleteMe)="handleDeleteMenu($event)">
</top-menu>
</div>
</ul>
同样在你的代码中this.menus将只是菜单,因为它在视图中不在组件类中
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.