【发布时间】:2016-04-20 12:34:39
【问题描述】:
我想实现常见的 Angular 1.x 模式,即在 Angular 2 的父指令中包含子指令。这是我想要的结构。
<foo>
<bar>A</bar>
<bar>B</bar>
<bar>C</bar>
</foo>
我希望这些 Bar 组件具有发送到 Foo 组件的 click 事件。
到目前为止,这是我的Foo:
@Component({
selector: 'foo',
template: `
<div>
<ng-content></ng-content>
</div>
`
})
export class Foo {
@ContentChildren(Bar) items: QueryList<Bar>;
}
这是我的Bar:
@Component({
selector: 'Bar',
template: `
<div (click)="clickity()">
<ng-content></ng-content>
</div>
`
})
export class Bar {
clickity() {
console.log('Broadcast this to the parent please!');
}
}
当Foo 的其中一个Bars 被点击时,我该如何通知它?
【问题讨论】:
-
您可以使用 EventEmitter 方法在 Bar 中使用
.emit(),在 Foo 组件中使用.subscribe()。作为@Output()或通过服务,如this example -
@Sasxa 你能澄清一下吗?我知道如何从子组件到父组件使用@Output(),但前提是我可以实际将属性放在子组件上。我不知道如何使用用户定义的孩子动态地做到这一点。
-
tbh,我没有那么多使用
@Output()...我更喜欢该服务,我在两个类中都导入它,请求相同的发射器实例并在我需要的地方注册发射/订阅,我将尝试在几分钟内创建示例... -
看看this example。不管组件是如何创建的,只需在它们的文件中导入服务......
标签: typescript angular angular2-directives