角度:在另一个模态指令中加载的谷歌地图指令保持空白
Angular: Google maps directive loaded in another Modal directive stays blank
我对 angular 相当陌生,但在尝试在另一个指令中加载"谷歌地图"指令时遇到了障碍。
下面是一个"模态视图"指令,我在其中加载了一个表单。
angular.module('test').directive('modal', function () {
return {
template: '<div class="modal fade">' +
'<div class="modal-dialog">' +
'<div class="modal-content">' +
'<div class="modal-header">' +
'<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>' +
'<h4 class="modal-title">{{ title }}</h4>' +
'</div>' +
'<div class="modal-body" ng-transclude></div>' +
'</div>' +
'</div>' +
'</div>',
restrict: 'E',
transclude: 'element',
replace:true,
scope:false,
link: function postLink(scope, element, attrs) {
...
}
};
});
接下来,这是谷歌地图指令...
angular.module('test').directive('googleMaps', function () {
return {
restrict:'E',
template:"<div></div>",
replace:true,
transclude: true,
scope:false,
link:function(scope, element, attrs){
window.onload = function() {
scope.map = new google.maps.Map(document.getElementById(attrs.id), {
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
scope.map.addListener('click', function() {
alert("Click!");
});
};
}
};
});
如果我只是正常加载 map 指令,地图看起来很好。当我尝试在其他指令中加载地图时出现问题,如下所示......
//modal directive
<modal title="{{title}}" visible="showModal">
<div class="row">
<div class="col-sm-12">
<form class="dropzone" dropzone="dropzoneConfig"></form>
</div>
</div>
<form role="form" name="userForm" ng-submit="addPerson(person)" novalidate>
<div class="form-group">
<label for="name">Name</label>
<input type="text" name="name" class="form-control" id="name" placeholder="Enter your name" ng-model="person.name" required />
</div>
//Maps directive
<google-maps id="map" class="form-group"></google-maps>
</form>
</modal>
此时,框架加载了谷歌徽标,但地图未加载,灰色背景保持显示。
任何帮助将不胜感激!谢谢
如果正常显示良好,那么它可能会digest
问题。 您可以尝试在$timeout
函数中初始化地图,无需document.onload
。 您应该在使用前注射$timeout
。
喜欢:
angular.module('test').directive('googleMaps', ['$timeout', function ($timeout) {
return {
restrict:'E',
template:"<div></div>",
replace:true,
transclude: true,
scope:false,
link:function(scope, element, attrs){
$timeout(function() {
scope.map = new google.maps.Map(document.getElementById(attrs.id), {
center: {lat: -34.397, lng: 150.644},
zoom: 8
});
scope.map.addListener('click', function() {
alert("Click!");
});
});
}
};
}]);
多亏了 shaishab roy 的"$timeout"建议,我发现我正在尝试将地图加载到隐藏的div 中。解决方案是在显示模态视图时初始化地图。感谢您的帮助:)
相关文章:
- 谷歌地图固定位置覆盖
- 不显示带有本地json文件数据的谷歌地图脚本
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 谷歌地图标记不会显示
- 无法在JS中显示谷歌地图
- 科尔多瓦页面类应用程序中的多个谷歌地图
- 需要帮助谷歌地图方向面板在FancyBox中显示
- 在谷歌地图上获取事件的x,y坐标
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 模拟谷歌地图中的点击
- 角度指令是't更新谷歌地图值
- 将谷歌地图(在指令中定义)与AngularJS居中
- 角度:在另一个模态指令中加载的谷歌地图指令保持空白
- AngularJS谷歌地图指令
- 在angular指令中出现谷歌地图API错误
- 谷歌地图在Angular指令中没有正确初始化
- 在加载指令模板之前没有初始化指令的作用域,导致无法加载谷歌地图
- 谷歌地图认证不工作,内容安全政策指令
- 如何在angular中初始化谷歌地图API而不使用任何指令
- 如何使用谷歌地图在angular中创建自定义指令来计算距离