1

我很困惑,因为 AngularJs 和 HTML 代码几乎与可以运行的项目完全相同,但这也是我第一次使用 LAMP 而不是 MEAN/MERN,所以也许与此有关?

我的 HTML 文件是:

<div ng-controller="map-controller">
  <ng-map center="35.5951,-82.5515" zoom="12" on-click="vm.placeCheckpoint(data)">

    <!-- Place marker for each checkpoint -->
    <marker id='{{checkpoint._id}}'
      ng-repeat="checkpoint in vm.checkpoints"
      position="{{checkpoint.position}}"
      on-click="vm.showDetail(checkpoint)"
      >
    </marker> <!-- this doesn't display -->

    <marker position="35.5951,-82.5515"></marker> <!--this displays -->

  </ng-map>
</div>

map-controller.js 是:

(function(window, angular, undefined) {
  angular.module('map')
  .controller('map-controller', ['NgMap', '$window', 'mapService',
    function(NgMap, $window, mapService) {

    var vm = this;
    // ==================== Map =====================================

    // Display map
    NgMap.getMap().then(function(map) {
      vm.map = map;
    });

    // Populate map with checkpoints
    mapService.getCheckpoints().then(function(data) {
      vm.checkpoints = data;
      console.log(vm.checkpoints); // logs as a list of objects
    });     


  }])
})(window, window.angular);

关于服务器、变量名称之间的唯一区别,以及 Google 让我为此使用 API 密钥,而另一个不需要它。他们都使用相同的 API 来获取数据。

另外,如果我尝试添加指令,地图就会消失。

4

1 回答 1

0

首先,确保数组中的position属性具有正确的格式,例如:vm.checkpoints[lat,lng]

[
    {
        "name": "Oslo",
        "position" : [ 59.923043,10.752839 ]  
    },
    {
        "name": "Stockholm",
        "position" : [ 59.339025, 18.065818 ]  
    }
]

其次,指令vm.checkpoints中未定义,marker您需要更改表达式 ng-controller="map-controller"ng-controller="map-controller as vm"

例子

(function (window, angular, undefined) {
    angular.module('map', ['ngMap'])


        .factory('mapService', function ($rootScope, $http) {
            var mapService = {
                getCheckpoints: function () {
                    return $http.get('https://rawgit.com/vgrem/a171e20cbe9915707e5b94c139105a65/raw/europe.json').then(function (response) {
                        return response.data;
                    });
                }
            }
            return mapService;
        })

        .controller('map-controller', ['NgMap', '$window', 'mapService',
            function (NgMap, $window, mapService) {
                var vm = this;
                vm.checkpoints = [];
                
                // Display map
                NgMap.getMap().then(function (map) {
                    vm.map = map;
                    
                });
                // Populate map with checkpoints
                mapService.getCheckpoints().then(function (data) {
                    vm.checkpoints = data.map(function(item, idx){
                           var position = [item.position.lat,item.position.lng];
                           item._id = idx;
                           item.position = position;
                           return item;
                    });
                    console.log(vm.checkpoints); // logs as a list of objects
                });

                vm.showDetail = function(){
                    console.log('clicked')
                }

            }])
})(window, window.angular);
<script src="https://code.angularjs.org/1.4.8/angular.js"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<script src="https://rawgit.com/allenhwkim/angularjs-google-maps/master/build/scripts/ng-map.js"></script>

<div ng-app="map" ng-controller="map-controller as vm">
  <ng-map center="48.1049441,4.1858258" zoom="4" >

    <marker 
      ng-repeat="checkpoint in vm.checkpoints"
      position="{{checkpoint.position}}"
      on-click="vm.showDetail(checkpoint)" >
    </marker> 

  </ng-map>
</div>

于 2017-02-23T12:35:29.140 回答