2017-04-24 115 views
0

我建立了一个模块,从我的数据库中读取位置,并使用Google地图APi在地图上显示标记。当前页面加载时,我得到一个位置列表并在地图上看到标记,但地图是空的(灰色屏幕),只显示Google徽标和最大缩放按钮。 我没有成功找到问题所在。 这是我的代码: map.html:谷歌地图开始灰色

<div class="page map" data-ng-controller="mapCtrl"> 
<div class="panel panel-default"> 
    <div class="panel-heading " > 
     <h3 class="panel-title"> 
      Locations 
     </h3><!-- panel-title h3 END --> 
    </div><!-- panel-heading div END --> 
    <div class="panel-body "> 
     <div ng-show="no_data">{{main.noDataMsg}}</div><!--if noDataFlag==true show noDataMsg div END--> 
     <div ng-show="!no_data"> 
      <div class="container-fluid noPadding"> 
       <div class="row-fluid"> 
        <div class="col-md-12 noPadding"> 
         <form> 
          <div class="form-group"> 
           <div class="input-group"> 
            <input type="text" class="form-control" placeholder="Search in Map Table" ng-model="searchMapTableData"> 
            <div class="input-group-addon"><i class="fa fa-search"></i></div><!-- input-group-addon div END --> 
           </div><!-- input-group div END --> 
          </div><!-- form-group div END --> 
         </form><!-- form div END --> 
        </div><!-- col-md-12 div END --> 
       </div><!--row-fluid div END --> 
       <div class="row-fluid"> 
        <div class="col-md-4 noPadding"> 
         <div class="table_wrapper"> 
         <table class="table table-bordered table-striped"> 
          <thead fsm-sticky-header> 
          <tr> 
           <th> 
            <a href="" ng-click="sortType = 'timestamp'; sortReverse = !sortReverse"> 
             Time 
             <span ng-show="sortType == 'timestamp' && !sortReverse" class="fa fa-caret-down"></span> 
             <span ng-show="sortType == 'timestamp' && sortReverse" class="fa fa-caret-up"></span> 
            </a> 
           </th> 
           <th> 
            <a href="" ng-click="sortType = 'latitude'; sortReverse = !sortReverse"> 
             Latitude 
             <span ng-show="sortType == 'latitude' && !sortReverse" class="fa fa-caret-down"></span> 
             <span ng-show="sortType == 'latitude' && sortReverse" class="fa fa-caret-up"></span> 
            </a> 
           </th> 
           <th> 
            <a href="" ng-click="sortType = 'longitude'; sortReverse = !sortReverse"> 
             Longitude 
             <span ng-show="sortType == 'longitude' && !sortReverse" class="fa fa-caret-down"></span> 
             <span ng-show="sortType == 'longitude' && sortReverse" class="fa fa-caret-up"></span> 
            </a> 
           </th> 
          </tr> 
          </thead> 

          <tbody> 
          <tr data-ng-repeat="item in locations_data | orderBy:sortType:sortReverse | filter:matchSearchInput(searchMapTableData)" 
           ng-class="{'selectedRowMap':$index == selectedRow}" 
           ng-click="setClickedRow($index)" 
           context-menu="menuOptions" model="'locations'" ng-model="locations_data" user-tag tag="{{item.user_tag}}"> 
           <td data-ng-click="goToLocation(item)"> {{item.timestamp}} </td> 
           <td data-ng-click="goToLocation(item)">{{item.latitude}} </td> 
           <td data-ng-click="goToLocation(item)"> {{item.longitude}}</td> 
          </tr> 
          </tbody> 

         </table><!-- table END --> 
         </div> 
         <span class="load_more" lazyload category="locations">{{error_text}}</span> 
        </div><!--col-md-4 div END --> 
        <div class="col-md-8 noPaddingRight" ng-show="!no_data"> 
         <div class="map_wrapper"> 
         <ui-gmap-google-map control="map" refresh="true" events="map.events" center="center" zoom="map.zoom" draggable="true" language="en" options="options" > 
          <ui-gmap-markers models="randomMarkers" coords="'coords'" idKey="'id'" options="'options'" > 
          </ui-gmap-markers> 
         <ui-gmap-map-control> 
          <button type="button" class="btn btn-primary" data-ng-click="zoomToAllPoints()">MAX ZOOM</button> 
         </ui-gmap-map-control> 
         </ui-gmap-google-map> 
         </div> 
        </div><!-- col-md-8 div END --> 
       </div><!-- row-fluid div END --> 
      </div><!-- container-fluid div END --> 
     </div><!-- if noDataFlag== false show bookmarks information div END--> 
    </div><!-- panel-body div END --> 
</div><!-- panel panel-default div END --> 

mapCtrl.js:

/** 
* Created by Netalie on 5/3/2016. 
*/ 
angular.module('app').controller('mapCtrl', function ($scope, $rootScope, mainTarget, $timeout, uiGmapIsReady, $filter) { 

    $scope.category_name = 'locations'; 
    $scope.locations_data = []; 
    $scope.main_array = []; 
    $scope.no_data = true; 

    $rootScope.$on('targetLoaded', function() { 
     //$scope.init(); 
    }); 

    $scope.options = { 
     width: 520, 
     height: 624 
    } 
    $scope.zoomToAllPoints = function() { 
     var markers = $scope.markerData; //some array; 

     $scope.bounds = new google.maps.LatLngBounds(); 
     for (var i = 0; i < markers.length; i++) { 
      $scope.bounds.extend(markers[i]); 
     } 

     uiGmapIsReady.promise().then((function() { 
      $timeout($scope.setFitBounds, "100") 
     })); 

    }; 

    $scope.init = function() { 
     $scope.window_height = $(window).height() - 290; 
     // console.debug('WINDOW HEIGHT IS: ',$scope.window_height); 
     angular.element('.angular-google-map-container').css('height', $scope.window_height + 'px'); 
     $scope.selectedRow = null; 
     $scope.sortType = 'timestamp'; // set the default sort type 
     $scope.sortReverse = true; // set the default sort order 
     $scope.searchNetworks = '';  // set the default search/filter term 

     //$scope.locations_data = mainTarget.getProperty().locations; 
     $scope.noDataFlag = true; 


     var markers = []; 
     $scope.markerData = []; 
     if ($scope.locations_data != undefined) { 

      for (var i = 0; i < $scope.locations_data.length; i++) { 

       var label = "Longitude: " + $scope.locations_data[i].longitude + "\n" + 
        "Latitude: " + $scope.locations_data[i].latitude + "\n" + 
        "Timestamp:" + $scope.locations_data[i].timestamp; 

       var marker = { 
        id: $scope.locations_data[i].record_hash, 
        coords: { 
         latitude: $scope.locations_data[i].latitude, 
         longitude: $scope.locations_data[i].longitude 
        }, 
        options: {title: label}, 
       }; 
       // console.debug('MARKER',marker); 
       var myLatlng = new google.maps.LatLng(parseFloat($scope.locations_data[i].latitude), parseFloat($scope.locations_data[i].longitude)); 

       $scope.markerData.push(myLatlng); 

       markers.push(marker); 

      } 
     } 
     $scope.randomMarkers = markers; 
     if ($scope.locations_data != undefined) { 
      if ($scope.locations_data.length > 0) { 
       $scope.noDataFlag = false; 
       $scope.center = {latitude: markers[0].coords.latitude, longitude: markers[0].coords.longitude}; 
      } 
      else { 
       $scope.noDataFlag = false; 
      } 
     } 
     else { 
      $scope.noDataFlag = false; 
     } 
     $scope.zoomToAllPoints(); 
    } 

    $scope.setClickedRow = function (index) { //function that sets the value of selectedRow to current index 
     $scope.selectedRow = index; 
    } 
    $scope.goToLocation = function (item) { 
     $scope.center = {latitude: item.latitude, longitude: item.longitude}; 
     // console.debug('goToLocation', $scope.center); 
     angular.extend($scope.map, {zoom: 15}); 
     //$scope.map = {zoom: 15}; 
    } 


    $scope.center = {latitude: 45, longitude: -73} 
    //$scope.init(); 
    $scope.map = {zoom: 15}; 


    $scope.setFitBounds = function() { 
     $scope.map.getGMap().fitBounds($scope.bounds); 
    }; 

    //function for run filter on specific columns in the table 
    $scope.matchSearchInput = function (query) { 
     if ($scope.locations_data.length > 0) { 
      return function (item) { 
       return ($filter('uppercase')($scope.returnEmptyString(item.timestamp)).match($filter('uppercase')(query)) || 
       $filter('uppercase')($scope.returnEmptyString(item.latitude)).match($filter('uppercase')(query)) || 
       $filter('uppercase')($scope.returnEmptyString(item.longitude)).match($filter('uppercase')(query))); 
      } 
     } 
    }; 
    //function check if string is null and return empty string 
    $scope.returnEmptyString = function (str) { 
     if (str == null) { 
      return ''; 
     } 

     return str; 
    }; 


    // listen for new_data event from the lazy load directive 
    $scope.$on('mainArrayLoaded', function (event, args) { 
     // console.debug("MAIN ARRAY LOADED",args); 
     $scope.locations_data = $scope.main_array; 
     $scope.init(); 
     $scope.no_data = false; 
    }); 
}); 
+0

检查你的浏览器控制台日志以找出任何可能的错误,并分享我没有除了在googleApiKey警告任何错误的代码 – Aminul

+0

仅仅是最低线,但是当我点击F12并关闭浏览器控制台地图加载 –

回答

0

我发现,问题是,地图,所以我加入之前加载页面

$scope.map.refresh(); 

纳入

uiGmapIsReady.promise().then 

功能