javascript - AngularJs 和 Google map 问题 : Not displaying markers?

标签 javascript angularjs google-maps google-maps-api-3

我正在尝试使用 AngularJs 和 Google Maps API 在 map 上显示标记。但是,由于某种原因,我无法显示标记。我不确定我从数据库中提取的数据是否错误,但如果有人可以帮助我,那就太好了!

.controller('MapCtrl', ['$scope', '$state', '$cordovaGeolocation', '$ionicSideMenuDelegate', '$ionicModal', 'LocationService', function($scope, $state, $cordovaGeolocation, $ionicSideMenuDelegate, $ionicModal, LocationService) {
    $scope.locations = [];

    LocationService.getLocations().then(function (result) {
      $scope.locations = result.data;
    });

    var mapOptions = {
        zoom: 4,
        center: new google.maps.LatLng(40.0000, -98.0000),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    $scope.map = new google.maps.Map(document.getElementById('map'), mapOptions);

    $scope.markers = [];

    var infoWindow = new google.maps.InfoWindow();

    var createMarker = function (info){

        var marker = new google.maps.Marker({
            map: $scope.map,
            position: new google.maps.LatLng(info.lat, info.long),
            title: info.name
        });

        marker.content = '<div class="infoWindowContent">' + info.name + '</div>';

        google.maps.event.addListener(marker, 'click', function(){
            infoWindow.setContent('<h2>' + marker.title + '</h2>' + marker.content);
            infoWindow.open($scope.map, marker);
        });

        $scope.markers.push(marker);

    }  

    for (i = 0; i < $scope.locations.length; i++){
        createMarker($scope.locations[i]);
    }

    $scope.openInfoWindow = function(e, selectedMarker){
        e.preventDefault();
        google.maps.event.trigger(selectedMarker, 'click');
    }
}])

.service('LocationService', function ($http, Backand) {
  var baseUrl = '/1/objects/';
  var objectName = 'locations/';

  function getUrl() {
    return Backand.getApiUrl() + baseUrl + objectName;
  }

  function getUrlForId(id) {
    return getUrl() + id;
  }

  getLocations = function () {
    return $http.get(getUrl());
  };

  return {
    getLocations: getLocations
  }
})

数据如何存储在数据库中

{
     "id": 1,
      "name": "Ballentine Hall",
      "lat": 39.165935,
      "long": -86.521287
}

最佳答案

嗯,我已经成功了。很确定这不是正确/最有效的方法,但至少它有效。

所以,我发现createMarker函数无法读取存储在locations变量中的数据。为了解决这个问题,我只是将 map 的所有代码放入从数据库获取位置数据的函数中。这就解决了获取数据的问题。

第二个问题是它没有从这些位置获取正确的数据。因此,在 getList 函数中,我将代码更改为:$scope.locations = response.data.data; 然后一切开始工作。

.controller('MapCtrl', ['$scope', '$state', '$cordovaGeolocation', '$ionicSideMenuDelegate', '$ionicModal', 'dataService', '$http', 'Backand', function($scope, $state, $cordovaGeolocation, $ionicSideMenuDelegate, $ionicModal, dataService, $http, Backand) {

  $scope.locations = [];

    dataService.getList('locations').then(function(response) {
    $scope.locations = response.data.data;

    var mapOptions = {
        zoom: 4,
        center: new google.maps.LatLng(40.0000, -98.0000),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    }

    $scope.map = new google.maps.Map(document.getElementById('map'), mapOptions);

    $scope.markers = [];

    var infoWindow = new google.maps.InfoWindow();

    var createMarker = function (info){

        var marker = new google.maps.Marker({
            map: $scope.map,
            position: new google.maps.LatLng(info.lat, info.long),
            title: info.name
        });


        marker.content = '<div class="infoWindowContent">' + info.name + '</div>';

        google.maps.event.addListener(marker, 'click', function(){
            infoWindow.setContent('<h2>' + marker.title + '</h2>' + marker.content);
            infoWindow.open($scope.map, marker);
        });

        $scope.markers.push(marker);
    }  

 for (i = 0; i < $scope.locations.length; i++){
        createMarker($scope.locations[i]);
    }

    $scope.openInfoWindow = function(e, selectedMarker){
        e.preventDefault();
        google.maps.event.trigger(selectedMarker, 'click');
    } 
  });

关于javascript - AngularJs 和 Google map 问题 : Not displaying markers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36289301/

相关文章:

javascript - Jquery .replaceWith 无法正常工作

javascript - 如何检查单击的元素是否与 React 中的 onClick 事件相同?

javascript - JQuery:禁用点击事件

html - Angular Material 布局 - 展开以填充窗口

javascript - 具有两种不同布局的 Angular Js 应用程序

javascript - AngularJS 使用 $timeout 给出未定义的错误

javascript - Google Maps API 中的自定义 InfoWindow 大小/指针位置

google-maps - Google Places API - 如何获取一个国家的地区?

javascript - 将 VisuAlgo 冒泡排序代码翻译成 Javascript

javascript - 用于街景的 Googlemap API V3.22 中的 fullScreenControl fullScreenControlOptions