ng-map:当我点击标记时,如何获取标记对象?

6

我正在使用非常酷的ng-map库来进行angular开发,我想知道如何访问由ng-map marker指令引用的底层标记对象。

所以,我有这个标记:

<div id="map-search" data-tap-disabled="true">
  <map zoom="15" disable-default-u-i="true">
    <marker ng-repeat=" pos in positions" position="{{pos.latitude}}, {{pos.longitude}}" id="{{pos.index}}" on-click="pinClicked()">
    </marker>
  </map>
</div>

在这种情况下,我没有找到一种直接访问Google Maps 标记对象的方法,它是在点击事件中触发的;从控制器:

  app.controller('MapSearchController', function($scope) {

      $scope.$on('mapInitialized', function(event, map) {
        $scope.map = map;
        //Assume existence of an Array of markers
        $scope.positions = generatePinPositionsArray();
      });

      $scope.pinClicked = function(event, marker) {
        console.log('clicked pin!');
        //HOW CAN I GET THE MARKER OBJECT (The one that was clicked) HERE?
        console.log('the marker ->', marker); //prints undefined
      };
  });

提前感谢您,


你确定 on-click="pinClicked()" 对应 $scope.pinTouched 吗?你没有调用同一个函数! - robe007
糟糕!我的错。我已经更正了,当然应该使用同样的方法。 - jlstr
2个回答

5

this是访问市场对象的答案。它与Google地图API完全相同,没有任何不同。再次在on-click函数内使用this

------ 编辑 -----

在testapp目录中有很多示例,当您找到ng-map的用法时这些示例会很有用。

$scope.foo = function(event, arg1, arg2) {
  alert('this is at '+ this.getPosition());
  alert(arg1+arg2);
}

Example:

https://rawgit.com/allenhwkim/angularjs-google-maps/master/testapp/events.html


谢谢,先生。您能否详细阐述一下控制器函数的外观是如何的呢?控制器内部函数的签名是什么样子的呢?(例如:pinClicked(marker){...})? - jlstr
非常感谢,正是我需要的!您做得很好,请继续保持! - jlstr

2
你需要创建一个标记数组!这是(在我看来)唯一的方法。请参见这里更新:像这样的plunkr 对你有用吗?
思路是在事件on-click="pinClicked(this)"中传递标记。然后你可以在控制器上稍后捕捉它:$scope.pinClicked = function(events, marker) {...}

嗨@robe007,我希望事情能像那样容易。在你的例子中,你从标记数组中选择第一个标记(因此,在该变量中保留对Marker对象的引用)。在我的情况下,我也有一组标记,但可以单击其中任何一个,而不一定是第一个。 - jlstr
很不幸,我本来想避免做你刚刚链接的答案上所说的事情。那种方式添加事件监听器很混乱。尽管如此,还是感谢您的友好回复!- 真诚地。 - jlstr
我更新了我的答案。希望这能对你有所帮助。问候! - robe007
很棒的回答!由于您比@allenhwkim先回答,我会把“已接受”给您(尽管他的回答可能被认为是更好的)。 - jlstr
1
太棒了!我在这个问题上已经挣扎了一段时间。 - geeky_monster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接