как сделать пользовательскую директиву в угловых для расчета расстояния с помощью карт Google

0

Я хочу сделать директиву функции для вычисления расстояния с помощью карт 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

я не понимаю, в чем смысл ошибки, кто-нибудь мне помогает, объясните мне, что не так с кодом. Спасибо :)

Теги:
google-maps
angularjs-directive

1 ответ

1

Может быть, это

travelMode: google.maps.DirectionsTravelMode.DRIVING

должно быть это?

google.maps.TravelMode.DRIVING

по этой ссылке?

API Карт Google

ОБНОВИТЬ

Попробуй это

В этом фрагменте 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>

Сообщите нам, если это работает...

  • 0
    Я думаю, что это не проблема, как я упоминал выше в комментарии. travelMode возвращает правильное значение. но я попробую это .. спасибо: D
  • 0
    Вы опробовали обновленный ответ?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню