2017-10-31 7 views
0

함수 전단지에서 this.map에 도달하는 모든 second.I 알고 난캔트 내가 뭘하려고 오전지도에 사용자의 위치를 ​​찾을 수있다

ionViewDidEnter() { 
    this.map = leaflet.map("map").fitWorld(); 
    this.loadmap(); 
} 
으로 setInterval(function(),1000);

내가지도를 초기화하고있는 함수를 호출 할 수 있습니다

문제는 locate 기능으로지도에 연결할 수 없다는 것입니다.

function locate(){ 

var marker; 

this.map.locate({ 
    setView: true, 
    maxZoom: 120 
}).on("locationfound", e => { 
    if (!marker) { 
     marker = new L.marker(e.latlng).addTo(this.map); 
    } else { 
     marker.setLatLng(e.latlng); 
    } 
}).on("locationerror", error => { 
    if (marker) { 
     map.removeLayer(marker); 
     marker = undefined; 
    } 
}); 
} 

if locate function (locate); this.map.locate는 작동하지만 내가 자신의 위치를 ​​추적하기 위해 everysecond 사용자를 찾고 싶기 때문에 .lotate everysecond를 호출해야하므로 setinterval을 사용하여 매번 작동하지만 그 작업을하지 않는 함수에 넣으려고했습니다. 함수 안에 .locate를 넣지 않고 사용자를 찾을 수 있습니까?

+0

윙윙 거리다 [XY 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) ... – ghybs

답변

0

비록 내가 제대로 이해한다면 완전히 명확하고, 당신이 setInterval의 첫 번째 인수로 당신의 locate 함수를 호출하려하지만 다음 this.map 그런 정의되지 않았거나 뭔가가 없다는 오류 메시지가 표시되지에서 질문?

그런 경우 this이 함수 호출자의 컨텍스트를 참조한다는 것을 알아야합니다. setInterval (setTimeout과 동일)을 사용할 때 컨텍스트는 더 이상 클래스 인스턴스 객체가 아니며 (전역 인스턴스 인 this.map), 전역 컨텍스트가 아닙니다. 문제는 여기에 설명 : https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/setInterval#The_this_problem

몇 가지 쉬운 해결책이있다, 당신은 정기적으로 그냥 map.locatewatch 옵션에 의존하지 않는 이유는 사용자의 위치를 ​​추적 할 수 있기 때문에, Referencing "this" inside setInterval/setTimeout within object prototype methods

말했다되는 것을 볼 수 ? 일부 문제 (아마도 Leaflet .locate watch option breaks .locate after changing tab Ionic 3?)를 해결하려는 경우 증상을 해결하기보다는 문제를 해결해야 할 가능성이 큽니다.

+0

시계 옵션이 작동하지 않습니다. 마커를 사용자가 처음 움직이면 마커는 움직이며 초기 위치는 움직입니다. – rektandpepper

+0

'watch'옵션이 작동하지 않는지 조사해야합니다. Chrome에서 정상적으로 작동합니다. – ghybs