我有一个用于<ng-content>转换内容的自定义模态组件:
@Component({
selector: 'modal-container',
template: `
<div [class]="css">
<div [attr.id]="id" class="reveal" (open)="openModal()">
<ng-content></ng-content>
</div>
</div>
`
})
export class ModalContainerComponent {
. . .
}
Run Code Online (Sandbox Code Playgroud)
在<ng-content>我的内容中有一个发出open事件的组件:
@Component({
selector: 'login-modal',
template: `
<modal-container [id]="'login-modal'">
<section>...</section>
</modal-container>
`,
})
export class LoginModalComponent implements OnInit {
@Output()
open = new EventEmitter();
ngOnInit(): void {
// Here I am checking an ngrx store with code that is not included
if (state.openLoginModal) {
this.open.emit();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,ModalContainerComponent永远不会收到这个事件.
例如:
即将到来.我究竟做错了什么?
由于@Output事件没有冒泡,我决定使用自定义指令来发出事件:
import { Directive, ElementRef, Renderer } from '@angular/core';
@Directive({
selector: '[open-modal]',
host: { '(click)': 'openModal()' }
})
export class OpenModalDirective {
constructor(
private elementRef: ElementRef,
private renderer: Renderer
) {}
openModal(): void {
this.renderer.invokeElementMethod(this.elementRef.nativeElement,
'dispatchEvent',
[new CustomEvent('open-modal-container', { bubbles: true })]);
}
}
Run Code Online (Sandbox Code Playgroud)
使用:在Angular2中如何知道何时输入字段丢失焦点作为示例.
但是,我仍然无法拿起自定义事件ModalContainerComponent:
@HostListener('open-modal-container')
openModalContainer(): void {
console.log('openModal() was invoked');
}
Run Code Online (Sandbox Code Playgroud)
我可以记录click事件,这样就发生了,但主机监听器失败了.思考?
我放弃了这种方法,转而使用共享服务,但我遇到的问题是.next()没有向订户提供价值:订阅者没有从.next()获得价值
您可以获得登录模式的实例@ContentChild()并手动订阅 open 事件
@Component({
selector: 'modal-container',
template: `
<div [class]="css">
<div [attr.id]="id" class="reveal" (open)="openModal()">
<ng-content></ng-content>
</div>
</div>
`
})
export class ModalContainerComponent {
@ContentChild(LoginModalComponent)
loginModal: LoginModalComponent;
ngAfterViewInit() {
this.loginModal.open.subscribe((event) => {
//Handel event here
});
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8283 次 |
| 最近记录: |