Saya tahu saya bukan yang pertama bertanya tentang hal ini, tetapi saya tidak dapat menemukan jawaban dalam pertanyaan sebelumnya. Saya memiliki ini dalam satu komponen
<div class="col-sm-5">
<laps
[lapsData]="rawLapsData"
[selectedTps]="selectedTps"
(lapsHandler)="lapsHandler($event)">
</laps>
</div>
<map
[lapsData]="rawLapsData"
class="col-sm-7">
</map>
Dalam controller rawLapsdata
akan dimutasi dari waktu ke waktu.
Dalam laps
, data adalah output sebagai HTML dalam format tabel. Ini berubah setiap kali rawLapsdata
berubah.
map
Komponen saya perlu digunakan ngOnChanges
sebagai pemicu untuk menggambar ulang marker di Google Map. Masalahnya adalah ngOnChanges tidak menyala ketika ada rawLapsData
perubahan pada induknya. Apa yang dapat saya?
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();
}
Pembaruan: ngOnChanges tidak berfungsi, tetapi sepertinya lapsData sedang diperbarui. Di ngInit adalah pendengar acara untuk perubahan zoom yang juga memanggil this.drawmarkers
. Ketika saya mengubah zoom, saya memang melihat perubahan pada marker. Jadi satu-satunya masalah adalah saya tidak mendapatkan notifikasi pada saat input data berubah.
Pada orang tua, saya memiliki baris ini. (Ingat bahwa perubahan tercermin dalam putaran, tetapi tidak di peta).
this.rawLapsData = deletePoints(this.rawLapsData, this.selectedTps);
Dan perhatikan bahwa this.rawLapsData
itu sendiri adalah pointer ke tengah objek json besar
this.rawLapsData = this.main.data.TrainingCenterDatabase.Activities[0].Activity[0].Lap;
zone.run(...)
harus dilakukan kemudian.
ngOnChanges()
tidak akan dipanggil. Anda dapat menggunakan ngDoCheck()
dan mengimplementasikan logika Anda sendiri untuk menentukan apakah isi array telah berubah. lapsData
diperbarui karena memiliki / merupakan referensi ke array yang sama dengan rawLapsData
.