Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将函数转换为角度范围函数_Javascript_Angularjs_Google Maps_Angularjs Scope - Fatal编程技术网

Javascript 如何将函数转换为角度范围函数

Javascript 如何将函数转换为角度范围函数,javascript,angularjs,google-maps,angularjs-scope,Javascript,Angularjs,Google Maps,Angularjs Scope,我有一个类似下面的代码来计算两点之间的距离,这是我的爱奥尼亚项目的代码。我使用了allenhwkim使用的Angularjs google maps,我想把代码转换成角度范围函数,这样它就可以在我的视图上运行。顺便说一句,我从这个论坛的最后一个问题中得到了这个代码 要计算距离,请执行以下操作: var calcRoute = function(origin,destination,cb) { var dist; var directionsDisplay;

我有一个类似下面的代码来计算两点之间的距离,这是我的爱奥尼亚项目的代码。我使用了allenhwkim使用的Angularjs google maps,我想把代码转换成角度范围函数,这样它就可以在我的视图上运行。顺便说一句,我从这个论坛的最后一个问题中得到了这个代码

要计算距离,请执行以下操作:

var calcRoute = function(origin,destination,cb) {
        var dist;
        var directionsDisplay;
        var directionsService = new google.maps.DirectionsService();
        directionsDisplay = new google.maps.DirectionsRenderer();
      var request = {
        origin:origin,
        destination:destination,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
      };
      directionsService.route(request, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
          directionsDisplay.setDirections(response);
          cb(null, response.routes[0].legs[0].distance.value / 1000);
        }
        else {
          cb('pass error information');
        }
      });
    };
下面的代码用于运行函数并将结果保存在$scope.A中,这样我就可以通过在我的视图中键入{{A}来调用结果

calcRoute("-7.048443, 110.441022","-7.048264, 110.440388", function (err, dist) {
    if (!err) {
      $scope.A = dist;
    }
});
问题是,我只需使用控制器中的函数并使用$scope发送结果,但是如何将代码例如转换为{{calc(ori,dest)}并返回我视图中的距离

我试着这样做:

    $scope.calc = function(ori,dest){

    var calcRoute = function(origin,destination,cb) {
        var dist;
        var directionsDisplay;
        var directionsService = new google.maps.DirectionsService();
        directionsDisplay = new google.maps.DirectionsRenderer();
      var request = {
        origin:origin,
        destination:destination,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
      };
      directionsService.route(request, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
          directionsDisplay.setDirections(response);
          cb(null, response.routes[0].legs[0].distance.value / 1000);
        }
        else {
          cb('pass error information');
        }
      });
    };


    calcRoute(ori,dest, function (err, dist) {
        if (!err) {
          return dist;
        }else{
                console.log("failed");
            }
    });
    return calcRoute();
};
{{calc("-7.048443, 110.441022","-7.048264, 110.440388")}}
然后调用我的视图中的函数,如下所示:

    $scope.calc = function(ori,dest){

    var calcRoute = function(origin,destination,cb) {
        var dist;
        var directionsDisplay;
        var directionsService = new google.maps.DirectionsService();
        directionsDisplay = new google.maps.DirectionsRenderer();
      var request = {
        origin:origin,
        destination:destination,
        travelMode: google.maps.DirectionsTravelMode.DRIVING
      };
      directionsService.route(request, function(response, status) {
        if (status == google.maps.DirectionsStatus.OK) {
          directionsDisplay.setDirections(response);
          cb(null, response.routes[0].legs[0].distance.value / 1000);
        }
        else {
          cb('pass error information');
        }
      });
    };


    calcRoute(ori,dest, function (err, dist) {
        if (!err) {
          return dist;
        }else{
                console.log("failed");
            }
    });
    return calcRoute();
};
{{calc("-7.048443, 110.441022","-7.048264, 110.440388")}}
它不起作用了, 返回未定义的并在下面显示控制台错误:

Error: [$interpolate:interr] Can't interpolate: 
  {{calc("-7.048443, 110.441022","-7.048264, 110.440388")}}

InvalidValueError: in property origin: not a string; and not a LatLng or LatLngLiteral: not an Object

希望任何人都能帮助我,谢谢:)

不确定您是否能实时计算函数并打印返回值

您可以做的是:

  • 将函数绑定到作用域函数
    $scope.calc=函数(x,y){…}
  • 在内部执行通常的赋值
    $scope.A=dist
  • 在视图中,只需打印
    {{A}
  • 要调用该函数,只需使用
    calc(ori,dest)
    。(从你的代码中,我不知道你该怎么称呼它)

不确定是否可以实时计算函数并打印返回值

您可以做的是:

  • 将函数绑定到作用域函数
    $scope.calc=函数(x,y){…}
  • 在内部执行通常的赋值
    $scope.A=dist
  • 在视图中,只需打印
    {{A}
  • 要调用该函数,只需使用
    calc(ori,dest)
    。(从你的代码中,我不知道你该怎么称呼它)

您提到的错误是您调用calcRoute两次,一次使用参数,一次不使用:

calcRoute(ori,dest, function (err, dist) {
        if (!err) {
          return dist;
        }else{
                console.log("failed");
            }
    });
    return calcRoute();
更大的问题是,你无法以这种方式评估你的距离。查看这篇关于计算异步表达式的文章


您必须将您的值绑定到$scope。如果您担心控制器会被大量的$scope变量弄得乱七八糟,您可以创建一个数组并向其中添加多个值,然后使用ng repeat在视图中显示信息。

您提到的错误是,您调用calcRoute两次,一次使用参数,一次不使用:

calcRoute(ori,dest, function (err, dist) {
        if (!err) {
          return dist;
        }else{
                console.log("failed");
            }
    });
    return calcRoute();
更大的问题是,你无法以这种方式评估你的距离。查看这篇关于计算异步表达式的文章


您必须将您的值绑定到$scope。如果您担心控制器会被大量的$scope变量弄得一团糟,您可以创建一个数组并向其中添加多个值,然后使用ng repeat在视图中显示信息。

谢谢您的回答@EsseTi。。我从我的控制器(javascript文件)调用它,所以当我想计算多个距离时,我必须使用不同的$scope(exp:$scope.A,$scope.B…)多次编写函数,正因为如此,我希望函数成为scope函数,并使用return dist而不是$scope.A=dist..希望您理解我的意思..:)创建一个指令,每个指令都有自己的作用域。因此,您可以将其多次放在页面中感谢您的回答@EsseTi。。我从我的控制器(javascript文件)调用它,所以当我想计算多个距离时,我必须使用不同的$scope(exp:$scope.A,$scope.B…)多次编写函数,正因为如此,我希望函数成为scope函数,并使用return dist而不是$scope.A=dist..希望您理解我的意思..:)创建一个指令,每个指令都有自己的作用域。因此,您可以在页面中多次放置它谢谢您的答案和建议,我将尝试:)谢谢您的答案和建议,我将尝试:)