【问题标题】:Scope of ng-click on a dynamically created button not working on Google Mapng-click 的范围在 Google Map 上不起作用的动态创建的按钮上
【发布时间】:2015-11-07 05:53:12
【问题描述】:

我正在尝试单击一个按钮,该按钮是在我使用 InfoWindow 单击 Google 地图的标记时动态创建的,但没有任何东西触发它。 This 是我关注的链接。我在这里想念什么?下面是我的代码。

JS

$scope.openMap = function(test){
    console.log(test);
}

$scope.addMarker = function(location) {
    var marker = new google.maps.Marker({
        position: location,
        map: map
    });
    var contentString = 'Lat: '+location.lat+ ' lng: '+location.lng+
                        '<button ng-click="openMap("testing")">Map</button>';
    var infowindow = new google.maps.InfoWindow({
        content: contentString
    });
    marker.addListener('click', function() {
        infowindow.open(map, marker);
    });
    markers.push(marker);
}

函数 addMarker 将在地图上添加一个新的标记位置。此函数有效,并且如注意到的那样,变量 contentString 已添加到 infowindow 中的属性内容中。问题是 $scope.openMap 不能被调用。

【问题讨论】:

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


    【解决方案1】:

    您可能需要编译您的 html 并添加它。添加 $compile 的依赖项,然后将代码更改为以下。

    var contentString = 'Lat: '+location.lat+ ' lng: '+location.lng+
                        '<button ng-click="openMap("testing")">Map</button>';
    
    contentString = $compile(contentString)($scope);
    

    希望它能解决你的问题。

    【讨论】:

    • angular js 在创建第一个指令并为其分配行为(clik、mouseup 等事件)时编译所有代码。因此,当您动态添加任何元素时,您需要再次编译它,它将是具有所有作用域的行为。
    • 是的,调查过了。现在这一切都对范围的行为有意义。谢谢!
    最近更新 更多