Angular 2 - 从子组件中的 ng-content 投影访问内容和事件
Angular 2 - Accessing content and events from ng-content projection in child component
我正在用 angular2 制作侧边栏。
代码:
边栏(子)组件的模板:
<div class="sidebar">
<ng-content></ng-content>
</div>
父组件模板:
<app-sidebar>
<li>
<a data-toggle="collapsible-1">Menu-item</a>
<ul id="collapsible-1">
<li>Sub-item 1</li>
<li>Sub-item 2</li>
<li>Sub-item 3</li>
</ul>
</li>
</app-sidebar>
在侧边栏组件中,我使用<ng-content></ng-content>
投影父组件中编写的内容。
我想做的事情:
当我点击 Menu-item
锚标记时,我希望列表切换(出现和消失,就像在可折叠中一样)。
我尝试过的方法和问题:
我在锚标签上保留了一个 (click)
事件。但在那种情况下,它会在父组件中通知,而不是在子 app-sidebar
组件中通知。出于可重用性目的,我不希望功能位于父组件中。我如何知道用户何时单击 app-sidebar
组件中的锚标记,并更改列表的显示?
有没有其他方法可以在侧边栏中制作可重复使用的可折叠内容?如果我的方法有误请告诉我。
您可以在 app-sidebar
中提供服务并将其注入项目
@Component({
selector: 'app-sidebar',
providers: [MyService],
template: `
<ng-content></ng-content>
`,
})
export class Sidebar {
}
并制作项目组件或从父级注入此服务的指令
@Component({
selector: 'sidebar-item',
template: `
<ng-content></ng-content>
`,
})
export class SidebarItem {
constructor(myService:MyService) {
console.log(myService);
}
}
此项目组件然后可以通知 Sidebar
组件有关点击的信息,并且可以订阅来自 Sidebar
的通知,例如将其自身显示为已选中。
我正在用 angular2 制作侧边栏。
代码:
边栏(子)组件的模板:
<div class="sidebar">
<ng-content></ng-content>
</div>
父组件模板:
<app-sidebar>
<li>
<a data-toggle="collapsible-1">Menu-item</a>
<ul id="collapsible-1">
<li>Sub-item 1</li>
<li>Sub-item 2</li>
<li>Sub-item 3</li>
</ul>
</li>
</app-sidebar>
在侧边栏组件中,我使用<ng-content></ng-content>
投影父组件中编写的内容。
我想做的事情:
当我点击 Menu-item
锚标记时,我希望列表切换(出现和消失,就像在可折叠中一样)。
我尝试过的方法和问题:
我在锚标签上保留了一个 (click)
事件。但在那种情况下,它会在父组件中通知,而不是在子 app-sidebar
组件中通知。出于可重用性目的,我不希望功能位于父组件中。我如何知道用户何时单击 app-sidebar
组件中的锚标记,并更改列表的显示?
有没有其他方法可以在侧边栏中制作可重复使用的可折叠内容?如果我的方法有误请告诉我。
您可以在 app-sidebar
中提供服务并将其注入项目
@Component({
selector: 'app-sidebar',
providers: [MyService],
template: `
<ng-content></ng-content>
`,
})
export class Sidebar {
}
并制作项目组件或从父级注入此服务的指令
@Component({
selector: 'sidebar-item',
template: `
<ng-content></ng-content>
`,
})
export class SidebarItem {
constructor(myService:MyService) {
console.log(myService);
}
}
此项目组件然后可以通知 Sidebar
组件有关点击的信息,并且可以订阅来自 Sidebar
的通知,例如将其自身显示为已选中。