Я хочу сделать директиву функции для вычисления расстояния с помощью карт google. Я использую angularjs и ionic для этого проекта, но когда я делаю этот код, я получаю сообщение об ошибке. вот код.
var control = angular.module('starter.controllers', []);
control.controller('MainCtrl', function($scope,$http, $ionicPopup, $timeout,$ionicModal) {
$scope.ori = "-7.048443, 110.441022";
$scope.dest = "-7.048264, 110.440388";
});
control.directive('distance', function () {
var calcRoute = function(ori,dest,cb) {
var dist;
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
directionsDisplay = new google.maps.DirectionsRenderer();
var request = {
origin:ori,
destination:dest,
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("error");
}
});
};
return{
restrict:"E",
scope: {
ori: "@",
dest:"@"
},
link: function(scope, elm, attrs) {
var ori = attrs.ori;
var dest = attrs.dest;
calcRoute(ori,dest, function (err, dist) {
if (!err) {
console.log(dist);
}else{
console.log(err);
}
});
}
};
});
на мой взгляд файла:
<distance ori='"{{ori}}"' dest='"{{dest}}"'></distance>
и ошибка на консоли:
Uncaught InvalidValueError: in property origin: not a string; and not a LatLng or LatLngLiteral: not an Object
я не понимаю, в чем смысл ошибки, кто-нибудь мне помогает, объясните мне, что не так с кодом. Спасибо :)
Может быть, это
travelMode: google.maps.DirectionsTravelMode.DRIVING
должно быть это?
google.maps.TravelMode.DRIVING
по этой ссылке?
ОБНОВИТЬ
Попробуй это
В этом фрагменте HTML
<distance ori='"{{ori}}"' dest='"{{dest}}"'></distance>
у вас есть ori = '"{{ori}}"' (а также dest) оба содержат двойные наборы котировок. Это приводит к строке внутри директивы, которая выглядит так...
"-7.048443, 110.441022"
Который является строкой, однако это строка с символами "и" в начале и в конце. Я думаю, что ваши ori и dest должны оба не иметь двойных кавычек, поскольку они все еще являются строками, когда они приходят в Google API, но в этом случае они поступают с символами, которые Google API, скорее всего, не позволяет. API-интерфейс Google Map скорее всего понравится такой строке...
-7.048443, 110.441022 NOT THIS "-7.048443, 110.441022"
или если вы распечатали их в консоли, это будет выглядеть так
"-7.048443, 110.441022" (good) ""-7.048443, 110.441022"" (bad)
В (плохом) случае, если вы сделали это
console.log(ori[0])
вы получите первый символ (плохая) строка, которая должна быть "Она должна быть -
Таким образом, вы получаете ошибку для источника, потому что API не работает с первым кодом. Я думаю, что если вы исправили ori на это, то...
<distance ori="{{ori}}" dest='"{{dest}}"'></distance>
только с одним набором цитат, то Dest потерпит неудачу по той же причине.
В конечном счете, я думаю, что изменение вашего фрагмента HTML на это приведет к правильному выполнению...
<distance ori="{{ori}}" dest="{{dest}}"></distance>
Сообщите нам, если это работает...
travelMode
возвращает правильное значение. но я попробую это .. спасибо: D