你好亲爱的怪人我有一个angular2的问题: 我正在开发angular2
中的应用程序(menuComponent, menuView.html)
(listProductComponent, listProductView.html)
(detailProductComponent, detailProductView.html)
我在menuView.html中有一个按钮,用于添加像这样的新产品
<ul class="nav nav-tabs">
<li><a class="active" [routerLink]="['ListeProduct']">Product</a></li>
<li><a [routerLink]="['ListeArticle']">Articles</a></li>
<li><a [routerLink]="['ListeClients']">Clients</a></li>
</ul>
<button type="button" (click)="Add()" class="btn btn-primary ajouter">Add</button>`
我的listProductView.html
是:
<table class="table table-striped">
<thead>
<tr>
<th>Code Product</th>
<th>Product Name</th>
<th>Cost</th>
</tr>
</thead>
<tr *ngFor="#product of products" >
<td>{{product.code}}</td>
<td>{{product.name}}</td>
<td>{{product.cost}}</td>
</tr>
</table> `
当我点击listProduct
的一个产品以查看detailProductView.html
中的产品详情时,我需要隐藏按钮添加menuView.html
。
答案 0 :(得分:2)
我认为您可以利用EventEmitter
属性的共享服务。一个组件将基于它发出事件,并且将通过订阅EventEmitter
来通知该另一个组件。收到事件后,此组件可以设置用于显示/隐藏按钮的属性...
共享服务
@Injectable()
export class MenuService {
addButtonEvent: EventEmitter = new EventEmitter();
}
不要忘记在boostrap函数中定义相应的提供程序,以便能够为整个应用程序共享相同的服务实例:`bootstrap(App,[MenuService]);
MenuComponent
组件
@Component({ ... })
export class MenuComponent {
showAdd: boolean = false;
constructor(menuService: MenuService) {
menuService.addButtonEvent.subscribe(
(showAdd) => {
this.showAdd = !this.showAdd;
}
);
}
}
ProductListComponent
组件:
export class ProductListComponent {
constructor(private service: MenuService) {
}
toggleAddButton():void {
this.addButton = this.addButton;
this.service.addButtonEvent.emit(this.addButton);
}
}
有关此方法实施的更多详细信息,请参阅此问题: