悬停在相应元素上时更改标记颜色 - > Angular 4

时间:2018-04-14 14:59:59

标签: angular hover

当我将鼠标悬停在其他组件中的某个元素上时,我正在尝试动态更改Google标记的颜色。 我还在学习Angular,我尝试使用Observables但没有任何成功。

我有main.view组件存储所有卡片(我称之为事件)。以下是main-view.component.ts代码的一部分:

constructor( private eventService: EventsDataService) {
    }
      ngOnInit() {
        this.getEvents();
      }

我正在注入从服务器获取我的卡数据的服务,并使用getEvents方法使用Observable将其转换为JSON数据。然后我在html模板中使用2 * ngFor指令迭代这些数据并填充卡片和标记。这是代码:

main-view.component.html

 <app-event-card *ngFor="let event of events; let i = index"></app-event-card>
  </section>
  <aside class="mapContainer"  [class.fixed]="fixed">
      <agm-map [class.fixed]="fixed"  [latitude]= "latitude"  [longitude]="longitude" >
        <agm-marker *ngFor="let event of events; let i = index"
        [latitude]= "event.location.coordinates[0]"
        [longitude]="event.location.coordinates[1]"
        label="{{event.price +'AUD'}}">
      </agm-marker>
      </agm-map>
  </aside>

现在,当我将鼠标悬停在与标记对应的其中一张卡片上时,我想更改标记的颜色或任何属性,但我不知道如何为这两个组件连接数据。

感谢您就此问题提供任何帮助或提示。

由于

2 个答案:

答案 0 :(得分:2)

我不知道您的组件是什么样的,但您需要的只是:

<app-event-card (mouseenter)="event.hovered = true" (mouseleave)="event.hovered = false" *ngFor="let event of events; let i = index"></app-event-card>

<aside ...>
  <agm-map ...>
    <agm-marker *ngFor="let event of events; let i = index"
      ...
      [color]="event.hovered ? 'blue' : 'red'">
    </agm-marker>
  </agm-map>
</aside>

Demo

答案 1 :(得分:1)

地图外的标记列表

<ul><li *ngFor="let data of markers" (mouseenter)="updateColor(data.lat)" (mouseleave)="updateColorR(data.lat)">{{data.lat}}</li></ul>

标志物

  <agm-marker 
  *ngFor="let m of markers; let i = index"
  (markerClick)="clickedMarker(m.label, i)"
  [latitude]="m.lat"
  [longitude]="m.lng"
  [markerDraggable]="m.draggable"
  [iconUrl]="m.icon"
  (dragEnd)="markerDragEnd(m, $event)">

成分<​​/ P>

updateColor(data:any){
this.markers.map((el,i)=>{
  if(el.lat==data){
    this.markers[i].icon='https://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|4286f4';

  }
})
}
updateColorR(data:any){
this.markers.map((el,i)=>{
  if(el.lat==data){
    this.markers[i].icon='https://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=%E2%80%A2|FF0000';

  }
})
}

stackblitz演示