javascript - AngularJS:正确定义回调?

标签 javascript angularjs callback ionic-framework steroids

我正在尝试打印一个对象列表,显示它们的名称以及它与用户位置之间的距离。我确实通过 GET 检索数据并根据纬度和经度计算距离。但是,我的范围数组的长度仍然为 0。我猜我的回调架构有问题,但我似乎无法弄清楚。

Controller :

angular.module('ionicApp', ['ionic']).controller('objectCtrl', function($scope, $http) {
$scope.objects = [];
$http.get('http://url.com/getobjects.php').then(function (resp) {
    for (var i = 0; i < resp.data.length; i++) {
        getDistance(resp.data[i].lat, resp.data[i].lng, (function(index){
            return function(dist){
                $scope.objects[index] = {
                    name: resp.data[index].name,
                    distance: dist
                };
            }
        })(i));
    }
}, function (err) {
    console.error('ERR', err);
    alert("error");
});

获取距离:

function getDistance(lat2, lon2, callback) {
    navigator.geolocation.getCurrentPosition(function onSuccess(position) {
        var lat1 = position.coords.latitude;
        var lon1 = position.coords.longitude;
        var radlat1 = Math.PI * lat1 / 180;
        var radlat2 = Math.PI * lat2 / 180;
        var radlon1 = Math.PI * lon1 / 180;
        var radlon2 = Math.PI * lon2 / 180;
        var theta = lon1 - lon2;
        var radtheta = Math.PI * theta / 180;
        var dist = Math.sin(radlat1) * Math.sin(radlat2) + Math.cos(radlat1) * Math.cos(radlat2) * Math.cos(radtheta);
        dist = Math.acos(dist);
        dist = dist * 180 / Math.PI;
        dist = dist * 60 * 1.1515;
        dist = dist * 1.609344;
        callback(dist);
    }, function onError(error) {
        alert("no location found:"+ error);
    });
}

知道我的代码有什么问题吗?谢谢。

最佳答案

看起来 getDistance 回调出现在 $digest 循环之外。所以你应该尝试手动启动它:

$scope.objects[index] = {
    name: resp.data[index].name,
    distance: dist
};
$scope.$apply();

或者使用$timeout服务:

getDistance(resp.data[i].lat, resp.data[i].lng, (function (index) {
    return function (dist) {
        $timeout(function() {
            $scope.objects[index] = {
                name: resp.data[index].name,
                distance: dist
            };
        });
    }
})(i));

关于javascript - AngularJS:正确定义回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26424376/

相关文章:

javascript - Angular : Using a directive within another directive

javascript - 从 Javascript 调用 Java Web API

javascript - 在 Angular 加载后加载 Jade 并解析所有变量

ruby-on-rails - Rails 回调 : Use if more than once as conditional in a callback

android - 如何处理 Retrofit 中 onFailure 方法的错误?

javascript - 使用 JQuery 设置默认语言

javascript - jquery ui 可排序元素在框外时显示

javascript - 如何在 ExtJS 面板中使用 jQuery 脚本

javascript - 如何将对象从 angularjs 传递到 spring Controller

c++ - 访问隐藏的 'this' 指针