Вчера я пытался поиграть с одним из вопросов SO и столкнулся с проблемой в своем решении.
в шаблоне компонента я использую директиву ngFor, в которой я использую свою пользовательскую директиву popover
. Только через директиву, я хочу показать скрытое содержимое для каждого объекта ngFor.
После проверки http://plnkr.co/edit/X4U8ofJ5rgmE1YQ7fTAG?p=preview вы осознает мою проблему.
в событии mouseenter
, используемом в директиве, я хочу показать содержимое соответствующего объекта ngFor
.
directive.ts
import {Input,Component,Output,EventEmitter,Input,Directive,Hostbinding} from 'angular2/core';
import {Component, Input, OnInit, OnChanges, ChangeDetectionStrategy, ElementRef} from 'angular2/core';
@Directive({
selector: '.tower-details',
host:{
'(mouseenter)':'show($event)',
'(mouseout)':'hide()'
}
})
export class popover{
@Input() value: string;
@Output() valueChange=new EventEmitter();
ngOnChanges(...args:any[]){
//console.log(args[0].value);
}
show(val)
{
console.log(val.target);
this.valueChange.emit(true);
}
hide()
{
console.log('hide');
this.valueChange.emit(false);
}
}
app.ts
template: `
<div *ngFor="#p of popovers;#index=index">
<div class="tower-details" [(value)]="show" style="display: block;border:1px solid green;background-color:orange" >
Hover Me ! {{index}}
<div *ngIf="show">
<div class="popover top" style="display: block;border:1px solid green">
<h3 class="popover-title">{{p.title}}</h3>
<div class="popover-content">pop up content</div>
</div>
</div>
</div>
<br>
<br>
</div>
`