gpt4 book ai didi

Angular 2 ng-content 从子组件接收事件

转载 作者:太空狗 更新时间:2023-10-29 17:45:27 24 4
gpt4 key购买 nike

我正在构建一个包含多个动态面板的页面,每个子面板都有相同的 HTML,因此我创建了一个父面板组件来包装每个面板。

问题是我想将一个事件从 child 发送到面板,但我似乎找不到答案。这是我到目前为止所拥有的:

// Panel Panel Component
@Component({
selector: 'panel',
template: `
<div (emittedEvent)="func($event)">
<ng-content></ng-content>
</div>
`
})
export class PanelComponent {

constructor() {}

func(event) {
// Do stuff with the event
}
}
// Child Panel Component (one of many)
@Component({
selector: 'child-panel-one',
template: `
// Template stuff
<button (click)="emitEvent()">Click</button>
`
})
export class ChildPanelOne {
emittedValue: Boolean = false;

@Output() emittedEvent = new EventEmitter();

constructor() {}

private emitEvent() {
this.emittedValue = true;

this.emittedEvent.emit(this.emittedValue)
}
}
//
// Main Parent Template
<panel>
<child-panel-one></child-panel-one>
</panel>

我可以创建一个共享服务,但将 bool 值从子级传递给父级似乎有点矫枉过正。

有什么想法吗?

谢谢

最佳答案

有几种方法

<panel #p>
<child-panel-one (emittedEvent)="p.func($event)"></child-panel-one>
</panel>

但这需要 <panel> 的用户设置事件绑定(bind)

或者您可以像 in Angular2 how to know when ANY form input field lost focus 中所示的 DOM 事件

或者您可以使用 ´@ContentChildren()` 然后强制订阅

@ContentChildren(ChildPanelOne) childPanels:QueryList<ChildPanelOne>
ngAfterContentInit() {
this.childPanels.toArray().forEach(cp => cp.emittedValue.subscribe(() => ...));
}

但这要求所有子面板都是预定义的类型。

您还可以将共享服务与子组件注入(inject)并用于向父组件发出事件的可观察对象一起使用。

关于Angular 2 ng-content 从子组件接收事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43227652/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com