我知道我不是第一个问这个问题的人,但是我在前面的问题中找不到答案。我有一个组件
<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正在更新。在ngInit中是一个事件侦听器,用于缩放更改,该调用也会调用this.drawmarkers
。当我更改缩放比例时,确实可以看到标记的变化。因此,唯一的问题是在输入数据更改时我没有收到通知。
在父母那里,我有这条线。(请记住,更改反映在圈中,而不反映在地图中)。
this.rawLapsData = deletePoints(this.rawLapsData, this.selectedTps);
请注意,this.rawLapsData
它本身就是指向大型json对象中间的指针
this.rawLapsData = this.main.data.TrainingCenterDatabase.Activities[0].Activity[0].Lap;
zone.run(...)
就可以了。
ngOnChanges()
不会被调用。您可以使用ngDoCheck()
和实现自己的逻辑来确定数组内容是否已更改。 lapsData
已更新,因为它具有/引用与相同的数组rawLapsData
。