我知道我不是第一个问这个问题的人,但是我在前面的问题中找不到答案。我把它放在一个组件里
<div class="col-sm-5">
<laps
[lapsData]="rawLapsData"
[selectedTps]="selectedTps"
(lapsHandler)="lapsHandler($event)">
</laps>
</div>
<map
[lapsData]="rawLapsData"
class="col-sm-7">
</map>
在控制器中,rawLapsdata
会时不时地发生变化。
在 laps
中,数据以表格格式输出为 HTML
,每当 rawLapsdata
发生变化时,这种格式就会发生变化。
我的 map
组件需要使用 ngOnChanges
作为触发器来重新绘制 Google Map 上的标记。问题是,当 rawLapsData
在父级中发生更改时,ngOnChanges
不会触发。我能做什么?
import {Component, Input, OnInit, OnChanges, SimpleChange} from 'angular2/core';
@Component({
selector: 'map',
templateUrl: './components/edMap/edMap.html',
styleUrls: ['./components/edMap/edMap.css']
})
export class MapCmp implements OnInit, OnChanges {
@Input() lapsData: any;
map: google.maps.Map;
ngOnInit() {
...
}
ngOnChanges(changes: { [propName: string]: SimpleChange }) {
console.log('ngOnChanges = ', changes['lapsData']);
if (this.map) this.drawMarkers();
}
更新: ngOnChanges
没有工作,但看起来好像 lapsData
正在更新。在 ngOnInit
中有一个用于缩放更改的事件侦听器,该事件侦听器也调用 this.drawmarkers
。当我改变变焦时,我确实看到了标记的变化。所以唯一的问题是,在输入数据发生变化时,我没有收到通知。
在父代中,我有这一行(回想一下,更改反映在圈中,但不反映在 map
中)。
this.rawLapsData = deletePoints(this.rawLapsData, this.selectedTps);
请注意,this.rawLapsData
本身是一个指向大型 json 对象中间的指针
this.rawLapsData = this.main.data.TrainingCenterDatabase.Activities[0].Activity[0].Lap;