【发布时间】:2016-10-12 15:47:42
【问题描述】:
我正在尝试使用嵌套子组件中的按钮切换位于主应用模板顶部的侧导航菜单。我不知道如何到达父级中的 sidenav 组件以将其告诉sidenav.open()。
我知道子组件上的 @Input 和 @Output,但据我了解,要使用它,我需要为子组件添加某种 DOM 标记以将它们附加到?如:
<app>
<sidenav-component #sidenav>...</sidenav-component>
<child [someInput]="some_parent_var" (childOpensNav)="sidenav.open()"></child>
</app>
关于如何做到这一点的大量文章。问题是我正在路由到这个组件,所以代码中没有明确存在<child> 标记。而我的代码是这样的:
<app>
<sidenav-component #sidenav>...</sidenav-component>
<router-outlet></router-outlet>
</app>
如果我有一个被路由到的子组件,我该如何执行sidenav.open() 或以某种方式从子组件访问父组件?
一些想法:我已经进行了一些研究并考虑了几种方法,但不确定它们是否正确或什至可行...一种方法是使用 Injector 服务并尝试遍历父级,但是这感觉不对:
// child component
constructor(injector: Injector) {
this.something = injector.parent.get(Something);
}
或者可能在父级中创建一个服务,以某种方式附加到 Sidenav 组件,然后将该服务注入子级??
【问题讨论】:
-
这正是我想要做的。我不敢相信我找到了你的问题。谢谢。希望我会向下滚动并得到一个好的答案。
标签: angular angular2-routing angular2-services