-1

コールバック関数内で配列オブジェクトを更新する必要があります。次の行を使用しましたが、値は角度変数ではなくコールバックループのスコープに設定されます。ビューが更新されていません。(deviceval)値は、コールバック内で印刷する場合に変更されますが、値の外はまだ古い値です。コールバック関数内で角度2スコープを取得できません

export class DashboardComponent implements OnInit { 
    hideTable: boolean = true; 
    public deviceVal:any; 
    constructor(private ref: ChangeDetectorRef) {} 

    ngOnInit() { 
    this.deviceVal = deviceData; 
    console.log(this.deviceVal); 
    var container = $('.map-canvas'); 
    var options = { 
    center: new google.maps.LatLng(41.676258, -99.683199), 
    zoom: 4, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    gmap = new google.maps.Map(container[0], options); 
    this.drawChart(deviceData); 
    this.plotMarkers(); 
    } 

    plotMarkers(){ 
    $.each(deviceData, function(key, val) { 
     var controller=this; 
     var marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(parseInt(val.lat), parseInt(val.lon)), 
     map: gmap, 
     }); 
     google.maps.event.addListener(marker, 'click', function() { 
     this.deviceVal = val; 
     }); 
     markerCache.push(marker); 
    }) 
    } 
} 
+0

私はあなたが角検出のためにangleを知らせるために角度のないコールバックを使用している場合はどこでも '$ scope。$ apply()'を使うべきだと思いますcle。 – Abdel

+0

私はそれが唯一の問題だとは思わない、あなたのポインタも間違っています。コールバックの内部に 'this'リファレンス(クラスの)を割り当てています。私はそれがコールバックの上に置かれて正しい '' 'this.deviceVal''を指していると思うと思います。 – Abdel

+0

@Abdel角2に$スコープがありません –

答えて

1

問題はここにある:

$.each(deviceData, function(key, val) { 
    var controller=this; 
    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(parseInt(val.lat), parseInt(val.lon)), 
    map: gmap, 
    }); 
    google.maps.event.addListener(marker, 'click', function() { 
    this.deviceVal = val; 
    }); 
    markerCache.push(marker); 
}) 

あなたはコールバック関数として、 'この' の値が変更された機能()を使用する場合。あなたはこれについてここでよく読んでください。

plotMarkers(){ 
    $.each(deviceData, (key, val) => { 
     var marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(parseInt(val.lat), parseInt(val.lon)), 
     map: gmap, 
     }); 
     google.maps.event.addListener(marker, 'click',() => { 
     this.deviceVal = val; 
     }); 
    }) 
    } 

しかし、あなたは次のように、他の多くの問題があります:

あなたは、この使用して、矢印の機能を修正することができますが(正直に言うと、あなたはNG2でjQueryのを避けなければならないのjQueryを使用する必要はありませんapp)、 'gmap'変数は定義されていません(たとえば 'deviceVal'で行ったようにクラスのプロパティとして設定できます)。 'markerCache'も定義されていません。drawChartメソッドはありません。 deviceData 'はplotMarkers()内で定義されていません。

+0

正しいです、これは彼のポインタが自分が望むものを参照していることを保証します参照する。クラスはどちらですか? – Abdel

+0

こんにちはキリスト教徒私は、エクスポートクラスの前にgmap、markercacheをグローバルに宣言しました。私はコードの問題のある部分をアップロードしました。drawchartは言及されていません – nandhini

+0

私は矢印関数を使って関数を変更しましたが、 – nandhini

0

Iは

var controller; 

ようエクスポートコンポーネントの前にグローバル変数を宣言し、それを解決しngoninitでそれを初期化()、

controller = this; 

とのaddListenerにコントローラを通過し、

google.maps.event.addListener(marker, 'click',() => { 
          controller.deviceVal=[]; 
          controller.deviceVal.push(val); 
          //console.log(controller.deviceVal+"end....................................") 
          }); 
関連する問題