AngularJS在Google Maps InfoWindow中单击

时间:2013-09-13 01:27:10

标签: google-maps angularjs

发布此问题: AngularJS ng-include inside of Google Maps InfoWindow?

该解决方案提供了很好的工作,但是在向模板中添加ng-click时发现了一个问题,它没有得到评估。

<script type="text/ng-template" id="/test.html">  
   <h4>{{latLng[0]}},{{latLng[1]}}</h4>   
   <button ng-click="clickMe()"/>click</button>
 </script>

clickMe只是在控制器内部测试功能,

$scope.clickMe = function(){
  alert("clicked");
}

其他信息: ng-hide被评估得很好:

<script type="text/ng-template" id="/test.html">  
  <h4>{{latLng[0]}},{{latLng[1]}}</h4>   
  <button ng-hide="true" ng-click="clickMe()"/>click</button>
</script>

任何帮助都会很棒,谢谢堆,几天都在摸不着头脑,没有结果。

此致 吉姆

2 个答案:

答案 0 :(得分:8)

问题是,您将innerHTML作为infoWindow的内容插入而不是编译的标记。因此,您的代码将被评估一次,并且您只传递此编译的静态内容。请尝试使用infoWindow.setContent(compiled[0])代替infoWindow.setContent(compiled[0].innerHTML)

答案 1 :(得分:0)

我确实遇到了这个问题并想分享我的解决方案,请理解这是一个特定的用例解决方法,需要重新路由用户,这可能在您的方案中根本不起作用。

我所做的是首先将参数传递到我需要的每个标记对象中,因此可以通过此信息在信息窗口中访问它们。然后我删除了ng-click,而是使用了一个带有href到路由的标签,以及我在移除ng-click后需要的参数。这是代码位:

    var marker = new google.maps.Marker({
        position: myLatLng,
        map: map,
        id: myParam1
    });

    google.maps.event.addListener(marker, 'click', function () {
        infowindow.setContent('<div id="content">'+
        '<a href="/site#/alinkroute?id='+this.myParam1+'">A ref to new template</a><br>'+
        '</div>'
      );
      infowindow.open(map, this);
    });

然后我让routeProvider提供了一个到这个地址的标准模板的路由,在这个地址我有一个ng-init,它调用我没有参数的ng-click。在我的ng-click中,我使用标准的javascript来解析参数的url,我得到了ng-click所需的值。

如果这有助于任何人,我很感兴趣。