从Angular服务中的回调传递数据

时间:2016-05-21 02:33:11

标签: javascript angularjs service angular-promise angular-leaflet-directive

我正在使用AngularJS传单搜索位置并获取纬度和经度坐标。在我的服务中,我调用我的代码在服务中显示地图,我写了一个回调,它接受(lat,lng)并向url发出HTTP请求以获取与这些坐标相关的数据。

理想情况下,我想创建一个返回http请求并在控制器中返回promise的函数。问题是getMarkets是一个回调函数,我不能直接调用函数。因为它需要首先传递坐标。它正在返回数据,我想知道如何将我收到的数据($ http(选项))传递给控制器​​,这样我就可以在视图中呈现响应。

app.service('mapService', (function($http) {
    var fmCoordinates = {};

    var requestMarkets = function(lat,lng){
        var options = {
            type: "GET",
            contentType: "application/json; charset=utf-8",
            url: "http://somerul?lat=" + lat + "&lng=" + lng
        };
        return console.log($http(options));

    };


L.Control.Search = L.Control.extend({
//Leaflet Code
_getLocation: function(key) {   //extract latlng from _recordsCache
        var latLong = this._recordsCache[key];
        fmCoordinates.lat = latLong.lat;
        fmCoordinates.lng = latLong.lng;
        requestMarkets(fmCoordinates.lat,fmCoordinates.lng);
        if( this._recordsCache.hasOwnProperty(key) )
            return latLong;//then after use .loc attribute
        else
            return false;
    },
})

1 个答案:

答案 0 :(得分:0)

https://docs.angularjs.org/api/ng/service/ $ Q

var requestMarkets = function(lat,lng){
    var defer = $q.defer();
    var dataFromHttp = {};
    var options = {
        type: "GET",
        contentType: "application/json; charset=utf-8",
        url: "http://somerul?lat=" + lat + "&lng=" + lng
    };
    $http(options).then(function(result) {
        dataFromHttp = result.data;
        defer.resolve(dataFromHttp);
    }, function(error){
        defer.reject(error);
    });
    return defer.promise;

};

然后在_getLocation

var promise = requestMarkets(fmCoordinates.lat,fmCoordinates.lng);
promise.then(function(yourData){...}, function(error){...});