Javascript 如何将函数转换为角度范围函数
我有一个类似下面的代码来计算两点之间的距离,这是我的爱奥尼亚项目的代码。我使用了allenhwkim使用的Angularjs google maps,我想把代码转换成角度范围函数,这样它就可以在我的视图上运行。顺便说一句,我从这个论坛的最后一个问题中得到了这个代码 要计算距离,请执行以下操作: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;
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(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..希望您理解我的意思..:)创建一个指令,每个指令都有自己的作用域。因此,您可以在页面中多次放置它谢谢您的答案和建议,我将尝试:)谢谢您的答案和建议,我将尝试:)