我尝试使用AngularJS实现谷歌地图infoWindow。
我有一个模板<div>{{foo}}<br/>
,$scope.foo="bar"
我想看到信息窗口的值为“bar”,而不是看到“{{foo}}”。因此,我用它编译和设置内容,但没有运气。
有些人可能认为这是重复的 AngularJS ng-include inside of Google Maps InfoWindow?,但我想动态编译内容。
以下是我现在的代码http://plnkr.co/edit/RLdAcaGz5FfmJEZi87ah?p=preview
angular.module('myApp', []).controller('MyCtrl', function($scope, $compile) {
var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
var mapOptions = { zoom: 4, center: myLatlng };
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var infowindow = new google.maps.InfoWindow({position: myLatlng});
var x = "<div>{{foo}}<br/>{{foo}}";
$scope.foo="bar";
var el = $compile(x)($scope);
infowindow.setContent(el.html());
infowindow.open(map);
})
我在考虑$scope.apply()
,但无法在代码中运行。
有没有办法让谷歌地图InfoWindow $compile
d?
答案 0 :(得分:0)
你快到了!
你是否需要执行$scope.$apply
来触发模板x
的解析,但由于你已经处于摘要周期的中间,调用$scope.$apply
会给出你有一个$rootScope:inprog
错误。您需要创建一个新的摘要周期,在其中调用$scope.$apply
:
$scope.$evalAsync(function() {
$scope.$apply();
infowindow.setContent(el.html());
infowindow.open(map);
});