मुझे पता है कि मैं इस बारे में पूछने वाला पहला व्यक्ति नहीं हूं, लेकिन मुझे पिछले सवालों का जवाब नहीं मिला। मेरे पास यह एक घटक में है
<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घटक को ngOnChangesGoogle मानचित्र पर मार्कर को फिर से शुरू करने के लिए ट्रिगर के रूप में उपयोग करने की आवश्यकता है । समस्या यह है कि जब 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 काम नहीं कर रहा है, लेकिन ऐसा लगता है कि जैसे लैप्सडाटा अपडेट किया जा रहा है। NgInit में ज़ूम परिवर्तन के लिए एक ईवेंट श्रोता है जो कॉल भी करता है this.drawmarkers। जब मैं ज़ूम बदलता हूं तो मुझे वास्तव में मार्करों में बदलाव दिखाई देता है। तो केवल मुद्दा यह है कि इनपुट डेटा में बदलाव के समय मुझे सूचना नहीं मिलती है।
माता-पिता में, मेरे पास यह रेखा है। (याद रखें कि परिवर्तन लैप्स में परिलक्षित होता है, लेकिन मानचित्र में नहीं)।
this.rawLapsData = deletePoints(this.rawLapsData, this.selectedTps);
और ध्यान दें कि this.rawLapsDataखुद एक बड़े जोंस ऑब्जेक्ट के बीच में एक पॉइंटर है
this.rawLapsData = this.main.data.TrainingCenterDatabase.Activities[0].Activity[0].Lap;
zone.run(...)तब करना चाहिए।
ngOnChanges()इसे नहीं बुलाया जाएगा। ngDoCheck()यदि सरणी सामग्री बदल गई है, तो यह निर्धारित करने के लिए आप अपने स्वयं के तर्क का उपयोग और कार्यान्वित कर सकते हैं । lapsDataअपडेट किया गया है क्योंकि इसमें उसी सरणी के लिए एक संदर्भ है / है rawLapsData।