我有一个用户列表。当我将鼠标移到每个用户上时,我想显示一个迷你个人资料。
@Directive({
selector: '[mini-profile-directive]',
host: {
'(mouseenter)': 'onMouseEnter($event)'
}
})
export class MiniProfileDirective {
private mouseEnter = new EventEmitter();
onMouseEnter($event) {}
}
当我使用时,我会这样使用:
<div *ngFor="let user of users" mini-profile-directive><div>
然而,我想展示一些东西,指令无法表现出来。
所以我创建了一个组件。
@Component({
selector: '[mini-profile-component]',
host: {
'(mouseenter)': 'onMouseEnter($event)'
},
template: ``
})
export class MiniProfileComponent {
private mouseEnter = new EventEmitter();
onMouseEnter($event) {
// here won't run!
}
}
然后像这样使用,这是错误的。
<div *ngFor="let user of users" mini-profile-component></div>
我想到的一种方法是同时拥有MiniProfileDirective
和MiniProfileComponent
<div *ngFor="let user of users" mini-profile-directive><div>
<mini-profile-component></mini-profile-component>
在MiniProfileDirective
内,使用服务来控制MiniProfileComponent
的显示/隐藏。
有更好的方法吗?感谢
答案 0 :(得分:2)
<强>更新强>
Example hovered profile component
<强>来源强>
作为host
绑定的替代方法,您可以使用listen
类的Renderer
方法,如下所示:
constructor(elementRef: ElementRef, renderer: Renderer) {
renderer.listen(elementRef.nativeElement, 'mouseenter', (e) => this.onMouseEnter(e))
}
查看work plunkr http://plnkr.co/edit/OPgHQKwlfJ2B46dgdUZH?p=preview