动态添加内容,Angular Promise Created Elements

时间:2016-08-07 20:05:04

标签: javascript angularjs leaflet

我有一张使用Angular Service获取数据的地图。数据被传递给一个循环通过它创建标记的函数。每个循环调用一个函数,应该为每个标记创建一个弹出窗口,但显示为空白。

当我将弹出内容记录到控制台时,它会在几秒钟后显示,但我无法弄清楚如何将其传递给标记。我觉得这与封闭有关,我一直在调查。这是我的代码:

    //Create the Markers Function
var createMapMarkers = function (data) {
    angular.forEach(data, function (value, key) {

        //Calling the get popup content function here
        var content = getPopupContent(value.AreaName, value.ImageUrl);

        var marker = L.marker([value.Lat, value.Long])
        .bindPopup(content)
        .addTo($scope.map);
    });
}

function getPopupContent(areaName, imageUrl) {
    var response;
        $http.get('/Home/GetPopupContent?areaName=' + areaName + '&imageUrl=' + imageUrl)
        .then(function (response) {
            //This logs the correct content
            console.log(response);
        });
    //But it does not return here
        return response;
} 

1 个答案:

答案 0 :(得分:2)

您需要从getPopupContent方法返回承诺,然后您可以在结果准备就绪时处理结果。实际上,您只是致电承诺并返回undefined

var createMapMarkers = function (data) {
    angular.forEach(data, function (value, key) {

        //Calling the get popup content function here
        getPopupContent(value.AreaName, value.ImageUrl).then(function(content) {
            var marker = L.marker([value.Lat, value.Long])
                         .bindPopup(content)
                         .addTo($scope.map);
        });
    });
}

function getPopupContent(areaName, imageUrl) {
    return $http.get('/Home/GetPopupContent?areaName=' + areaName + '&imageUrl=' + imageUrl);
}