2017-05-05 13 views
0

一旦視圖使我得到這個錯誤,並彈出沒有添加 -setLngLat()setPopup不是函數

mapbox-gl.js:176 TypeError: (intermediate value).setLngLat(...).setPopup is not a function(…)

有誰遇到這樣或知道的東西來解決這一問題?

代碼是這樣設置彈出了標記,我已經按照這個鏈接https://www.mapbox.com/mapbox-gl-js/example/set-popup/

let tpl; 
    if (vendor.get('cachedAverageRating')) { 
    tpl = ` 
    <div class='ui map-marker'> 
     <div class="photo"> 
     <img src="${vendor.getAvatar() || FIXTURE_IMAGE}"></div> 
     <div class="ui violet counter">${vendor.get('cachedAverageRating')}</div> 
    </div> 
    `; 
    } else { 
    tpl = ` 
    <div class='ui map-marker'> 
     <div class="photo"> 
     <img src="${vendor.getAvatar() || FIXTURE_IMAGE}"> 
     </div> 
    </div> 
    `; 
    } 

    let markerContainer = document.createElement('div'); 
    markerContainer.innerHTML = tpl; 

    // create the popup 
    let markerPopup = new MapboxGL.Popup({offset: 25}) 
    .setHTML(`<div>Name : ${vendor.get('name')}, Address : ${vendor.get('address')}, Rating : ${vendor.get('cachedAverageRating')}</div>`); 

    // create the marker 
    new MapboxGL.Marker(markerContainer, {offset:[-25, -25]}) 
    .setLngLat([get(vendor, 'lon'), get(vendor, 'lat')]) 
    .setPopup(markerPopup) // sets a popup on this marker 
    .addTo(map); 

回答

1

您使用MapboxGL代替mapboxgl,代碼是區分大小寫的。

您的供應商變量中可能存在錯誤,但我們無法看到您在答案中如何定義它。如果您可以提供更多信息,我們可能會進一步提供幫助。現在:這段代碼的工作原理:

mapboxgl.accessToken = '<your access token here>'; 

var monument = [-77.0353, 38.8895]; 
var map = new mapboxgl.Map({ 
    container: 'map', 
    style: 'mapbox://styles/mapbox/light-v9', 
    center: monument, 
    zoom: 15 
}); 
let tpl; 
​ 
    tpl = "text"; 
​ 
    let markerContainer = document.createElement('div'); 
    markerContainer.innerHTML = tpl; 
​ 
    // create the popup 
    let markerPopup = new mapboxgl.Popup({offset: 25}) 
    .setHTML("test"); 
​ 
    // create the marker 
    new mapboxgl.Marker(markerContainer, {offset:[-25, -25]}) 
    .setLngLat(monument) 
    .setPopup(markerPopup) // sets a popup on this marker 
    .addTo(map); 
+0

MapboxGL是正確的。在我的情況下,我已初始化 var MapboxGL = window.mapboxgl; 然後使用MapboxGL。 –

+0

你想給我們更多有關你的「供應商」變量的信息嗎? – zibethin

0

這應該是簡單的讓你從錯誤信息進行調試。顯然,setLngLat()正在返回一個不是Marker的東西,因此setPopup()未在其上定義。

爲什麼這樣做?因爲你錯過了setLngLat()。您應該通過一個LngLat對象(定義爲here)。

我不太確定你想用你的get()函數做什麼,但它顯然不會根據需要返回數字。

+0

我傳遞正確的緯度值。我們可以通過單個參數或兩個參數(lat,lon)傳遞數組, –