Angularjs:ReferenceError:未在Channel.onDeviceReady上定义函数

Angularjs:ReferenceError:未在Channel.onDeviceReady上定义函数,angularjs,cordova,Angularjs,Cordova,这是我今天的第二个问题。我使用的是Cordova+angular 1。 我正试图借助于DistanceInkMBetween坐标函数来比较两个地理位置 我在运行应用程序时遇到此错误 angular.min.js:101 ReferenceError:DistanceInkMBetween坐标为 未定义 在onDeviceReady频道 这是代码 document.addEventListener('deviceready', function onDeviceReady() {

这是我今天的第二个问题。我使用的是Cordova+angular 1。 我正试图借助于DistanceInkMBetween坐标函数来比较两个地理位置

我在运行应用程序时遇到此错误

angular.min.js:101 ReferenceError:DistanceInkMBetween坐标为 未定义 在onDeviceReady频道

这是代码

document.addEventListener('deviceready', function onDeviceReady() {
            angular.bootstrap(document, ['formApp']);
        }, false);

        var formApp = angular.module('formApp', []);
//定义角度模块/应用程序

 var formApp = angular.module('formApp', []);

formApp.controller('formProfile1', function($scope,$http,$location, $timeout){

function degreesToRadians(degrees) {
    return degrees * Math.PI / 180;
}

function distanceInKmBetweenEarthCoordinates(lat1, lon1, lat2, lon2) {
    var earthRadiusKm = 6371;

    var dLat = degreesToRadians(lat2-lat1);
    var dLon = degreesToRadians(lon2-lon1);

    lat1 = degreesToRadians(lat1);
    lat2 = degreesToRadians(lat2);

    var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
        Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    return earthRadiusKm * c;
}
我正在使用Cordova地理定位插件获取当前位置

navigator.geolocation.getCurrentPosition(function(position) {
                    $scope.userlongitude = position.coords.longitude;

                    $scope.userlatitude = position.coords.latitude;
下面是一些ajax请求,用于从数据库获取数据,包括要比较的地理位置

$http({
                    url: 'https://www.abcd.xyz/get_info.php',
                    method: "GET",
                    params: {
                        tn_id: $scope.tn_id
                    }
                })
                .success(function(data) {

                    if (data.success) {
                          $scope.longitude = data.longitude;
                          $scope.latitude =  data.latitude;     
                    }
$scope.distance = distanceInKmBetweenCoordinates($scope.userlatitude, $scope.userlongitude, $scope.latitude, $scope.longitude);
最后,我比较了地理位置

你能告诉我我做错了什么吗?如果我只是在角度上进行比较,那么它显示的是正确的值,但与Cordova一起,它被破坏了

我还在正文部分做了如下修改

<!--<body id="home" ng-app="formApp"> --> Previous one
  <body id="home">
当我测试它时,它给了我正确的值,但当我这样测试它时

degreesToRadians = function(degrees) {
        return degrees * Math.PI / 180;
    }

     distanceInKmBetweenEarthCoordinates= function(lat1, lon1, lat2, lon2) {
        var earthRadiusKm = 6371;

        var dLat = degreesToRadians(lat2-lat1);
        var dLon = degreesToRadians(lon2-lon1);

        lat1 = degreesToRadians(lat1);
        lat2 = degreesToRadians(lat2);

        var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
            Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * Math.cos(lat2);
        var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
        return earthRadiusKm * c;
    }

    $scope.distance = distanceInKmBetweenEarthCoordinates(43, 44,44,55);
    alert($scope.distance);
distanceInKmBetweenCoordinates($scope.userlatitude, $scope.userlongitude, 44,55);
然后它给了我同样的错误

我使用$timeout函数延迟加载,但错误是相同的

$timeout(function() {
                         $scope.distance = distanceInKmBetweenCoordinates($scope.userlatitude, $scope.userlongitude, 44,55);
                         alert($scope.distance);
                         console.log($scope.distance);

                         }, 5000);

正如您所建议的,一旦收到ajax调用的响应,就可以放置代码

 if (data.success) {
       $scope.longitude = data.longitude;
       $scope.latitude =  data.latitude;     
       $scope.distance = distanceInKmBetweenCoordinates($scope.userlatitude, $scope.userlongitude, $scope.latitude, $scope.longitude);
 }

尝试将函数分配给控制器作用域中的本地变量,可能它失去了引用:

formApp.controller('formProfile1', function($scope,$http,$location){

var degreesToRadians = function(degrees) {
  return degrees * Math.PI / 180;
}

var distanceInKmBetweenEarthCoordinates = function(lat1, lon1, lat2, lon2) {
  var earthRadiusKm = 6371;

  var dLat = degreesToRadians(lat2-lat1);
  var dLon = degreesToRadians(lon2-lon1);

  lat1 = degreesToRadians(lat1);
  lat2 = degreesToRadians(lat2);

  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.sin(dLon/2) * Math.sin(dLon/2) * Math.cos(lat1) * 
    Math.cos(lat2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  return earthRadiusKm * c;
}

张贴您的整个控制台code@Sajeetharan我想我已经发布了大部分代码。其他的只是HTTP请求。没别的了。好的,我认为你的函数超出了controller@Sajeetharan如果我手动放置数据,那么它会显示我的价值。我怀疑的是,我的代码在从cordova geolocation插件和ajax获取数据之前运行。我认为这是一个好主意。让我试试。投了赞成票,同样的错误,伙计。我越来越不确定了。我没有主意了,还有什么主意吗,萨吉塔兰?若我手动输入值,那个么它是工作的,但若我从范围中输入值,它就并没有得到。我使用了超时功能,但错误是相同的。更新问题。您是否可以使用JSFIDLE复制问题?我正在尝试,但在fiddle中,如果我在范围中手动分配值,则无法确定如何获取地理位置。我正在使用Cordova.angular.min.js:101错误:[ng:areq]这就是即将出现的错误。