角2子组件的事件广播给父母 [英] Angular 2 child component events broadcast to parent
本文介绍了角2子组件的事件广播给父母的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想实现具有角2父指令中子指令的共同角1.x的格局这是我期望的结构。
I'd like to implement the common Angular 1.x pattern of having child directives within a parent directive in Angular 2. Here's my desired structure.
<foo>
<bar>A</bar>
<bar>B</bar>
<bar>C</bar>
</foo>
我想这些酒吧
组件有得到释放到富
组件click事件。
I'd like for these Bar
components to have click events that get emitted to the Foo
component.
下面是我的富
至今
@Component({
selector: 'foo',
template: `
<div>
<ng-content></ng-content>
</div>
`
})
export class Foo {
@ContentChildren(Bar) items: QueryList<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!');
}
}
我如何去通知富
只要它的酒吧之一
点击?
推荐答案
您可以使用一个服务组件之间发送数据,如果使用你不能做 @Output()
装饰。这里有一个例子:
You can use a service to send data between components if you can't do it using @Output()
decorator. Here's an example:
import {EventEmitter} from 'angular2/core';
export class EmitterService {
private static _emitters: { [channel: string]: EventEmitter<any> } = {};
static get(channel: string): EventEmitter<any> {
if (!this._emitters[channel])
this._emitters[channel] = new EventEmitter();
return this._emitters[channel];
}
}
您导入你需要的地方发射或订阅事件:
You import it wherever you need to emit or subscribe to an event:
// foo.component.ts
import {EmitterService} from '../path/to/emitter.service'
class Foo {
EmitterService.get("some_id").subscribe(data => console.log("some_id channel: ", data));
EmitterService.get("other_id").subscribe(data => console.log("other_id channel: ", data));
}
// bar.component.ts
import {EmitterService} from '../path/to/emitter.service'
class Foo {
onClick() {
EmitterService.get("some_id").emit('you clicked!');
}
onScroll() {
EmitterService.get("other_id").emit('you scrolled!');
}
}
另外一个例子: plunker
这篇关于角2子组件的事件广播给父母的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文