使cordova地理定位功能返回位置

时间:2016-06-04 21:05:06

标签: javascript angularjs cordova

我查看了Cordova Geolocation上的示例,我无法确定如何从其功能中返回位置,因此我可以从不同位置多次调用它。

以下是获取职位的示例:

    var onSuccess = function (position) {
        alert('Latitude: ' + position.coords.latitude + '\n' +
            'Longitude: ' + position.coords.longitude + '\n' +
            'Altitude: ' + position.coords.altitude + '\n' +
            'Accuracy: ' + position.coords.accuracy + '\n' +
            'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
            'Heading: ' + position.coords.heading + '\n' +
            'Speed: ' + position.coords.speed + '\n' +
            'Timestamp: ' + position.timestamp + '\n');
    };

    function onError (error) {
        alert('code: ' + error.code + '\n' +
            'message: ' + error.message + '\n');
    }

    navigator.geolocation.getCurrentPosition(onSuccess, onError);

所以我希望能够调用一个函数并让它返回位置对象,它来自'onSuccess'

1 个答案:

答案 0 :(得分:1)

您可能正在寻找bind

var getPosition
function onSuccess(position){
  getPosition = function(position){
    // do somethin with the position object afterwards
  }.bind(null, position);
}

// ... some code or some timeout after onSuccess function has been fired

if(getPosition)getPosition();

只是要明确上面的代码应该如何工作:

// simulate cordova-geolocation-onSuccess call
onSuccess({x:2,y:5});

setTimeout(function(){

   if(getPosition)getPosition();

},2000);

希望这有帮助,我已正确理解你的问题。

注意: bind 可用于创建可在特定上下文(第一个参数)内执行的函数以及某些传递的参数值(第二个,第三个...参数)。

根据您的评论如下: 您还可以使用回调函数作为参数来实现此目的:

function getUserPosition(callback) {
  function onSuccess(position) {
    callback(position);
  };
  $cordovaGeolocation.getCurrentPosition(options).then(onSuccess);
};

getUserPosition(function(position){
  // do something with position object here
});

但是当你想使用一个真正能够返回地理定位对象的函数时,你必须使用第一个答案。