来自另一个组件的引用模板
reference template from another component
我有一个 header 和一个边栏组件。我试图到达侧边栏组件中的抽屉。我的目标是,如果用户单击 header 组件中的按钮,则抽屉会在侧边栏组件中切换。
为此,我在边栏组件中引用了抽屉,在 header 组件中引用了边栏本身。然后在点击事件中我有这个:
this.appSidebar.drawer.instance.toggle();
问题是,appSidebar
未定义。所以问题是,我应该如何修改 stackblitz 以获得正确的行为? Input 和 Output 只针对 child-parent 关系,对吧?
这里是 stackblitz:https://stackblitz.com/edit/angular-dxpopup-mz69rq
是的。 Input 和 Output 仅针对组件之间的父子关系。你要做的是你已经有了父子关系,即 AppComponent 是 HeaderComponent 和 SidebarComponent 的父级。您只需要重构您的逻辑,以便操作通过共同的父级从一个兄弟姐妹流向另一个兄弟姐妹。
尝试
在你的
header.component.ts
export class HeaderComponent {
@Output() hamburgerClicked: EventEmitter<any> = new EventEmitter<any>(); // this will enable the parent component to listen to button clicks.
public hamburgerOpt = {
text: "button",
onClick: () => {
this.hamburgerClicked.emit();
}
};
}
app.component.ts
export class AppComponent {
@ViewChild("appsidebar") appSidebar: SidebarComponent;
onHamburgerClick(){ // parent can toggle the drawer in the ViewChild once the event is triggered.
this.appSidebar.drawer.instance.toggle();
}
}
app.component.html
<app-header (hamburgerClicked)="onHamburgerClick()"></app-header>
<app-sidebar #appsidebar></app-sidebar>
我有一个 header 和一个边栏组件。我试图到达侧边栏组件中的抽屉。我的目标是,如果用户单击 header 组件中的按钮,则抽屉会在侧边栏组件中切换。
为此,我在边栏组件中引用了抽屉,在 header 组件中引用了边栏本身。然后在点击事件中我有这个:
this.appSidebar.drawer.instance.toggle();
问题是,appSidebar
未定义。所以问题是,我应该如何修改 stackblitz 以获得正确的行为? Input 和 Output 只针对 child-parent 关系,对吧?
这里是 stackblitz:https://stackblitz.com/edit/angular-dxpopup-mz69rq
是的。 Input 和 Output 仅针对组件之间的父子关系。你要做的是你已经有了父子关系,即 AppComponent 是 HeaderComponent 和 SidebarComponent 的父级。您只需要重构您的逻辑,以便操作通过共同的父级从一个兄弟姐妹流向另一个兄弟姐妹。
尝试
在你的 header.component.ts
export class HeaderComponent {
@Output() hamburgerClicked: EventEmitter<any> = new EventEmitter<any>(); // this will enable the parent component to listen to button clicks.
public hamburgerOpt = {
text: "button",
onClick: () => {
this.hamburgerClicked.emit();
}
};
}
app.component.ts
export class AppComponent {
@ViewChild("appsidebar") appSidebar: SidebarComponent;
onHamburgerClick(){ // parent can toggle the drawer in the ViewChild once the event is triggered.
this.appSidebar.drawer.instance.toggle();
}
}
app.component.html
<app-header (hamburgerClicked)="onHamburgerClick()"></app-header>
<app-sidebar #appsidebar></app-sidebar>