在引导选项卡中未加载角度谷歌地图
Angular-google-maps not loading in bootstrap tab
引导选项卡中未加载角度谷歌地图
但是,如果我最小化窗口,谷歌地图将完美加载
在我的控制器中
var app = angular.module('mymap', ['uiGmapgoogle-maps', 'ngAnimate', 'ui.bootstrap']);
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.fullmap = {
center: {latitude: 67, longitude: -55},
zoom: 8,
id: 9345,
events: {
tilesloaded: function (map) {
$scope.$apply(function () {
google.maps.event.trigger(map, "resize");
});
}
}
}
});
HTML文件
<uib-tabset>
<uib-tab heading="FEATURED" active=true >
<br><br>
</uib-tab>
<uib-tab heading="RECENTLY USED">
<br><br>
RECENTLY USED
</uib-tab>
<uib-tab heading="TOP RATED" >
<br><br>
TOP RATED
</uib-tab>
<uib-tab heading="NEAR ME" ng-click="loadmap()">
<br><br>
<div class="single-map-view" id="mapview">
<ui-gmap-google-map center='fullmap.center' zoom='fullmap.zoom' refresh="true">
<ui-gmap-marker idkey="fullmap.id" coords="fullmap.center" events="fullmap.events"></ui-gmap-marker>
</ui-gmap-google-map>
</div>
</uib-tab>
</uib-tabset>
演示:http://plnkr.co/edit/q7MdFxZ3Am5hvk1hL2Ja?p=preview
有人知道为什么会发生这种事吗?
提前感谢!
看看它是否对您有帮助:
编辑1
angular.module('myApp', ['directives']);
function MyMapCtrl ($scope) {
$scope.selected = 'first'; // try to put 'second' here
}
angular.module('directives', []).directive('map', function() {
return {
restrict: 'E',
replace: true,
template: '<div></div>',
link: function($scope, element, attrs) {
var center = new google.maps.LatLng(50.1, 14.4);
var map_options = {
zoom: 14,
center: center,
mapTypeId: google.maps.MapTypeId.SATELLITE
};
// create map
var map = new google.maps.Map(document.getElementById(attrs.id), map_options);
// configure marker
var marker_options = {
map: map,
position: center
};
// create marker
var marker = new google.maps.Marker(marker_options);
$scope.$watch('selected', function () {
window.setTimeout(function(){
google.maps.event.trigger(map, 'resize');
},100);
});
}
}
});
body {
padding: 10px;
}
#map_canvas {
margin: 0;
padding: 0;
height: 400px;
border: 1px solid #ccc;
}
.tabs {
height: 35px;
margin: 0;
width: 100%;
}
.tab {
background-color: #E4E4E4;
cursor: pointer;
float: left;
font-size: 12px;
margin-right: 10px;
padding: 10px 0 10px;
text-align: center;
width: 85px;
line-height: 15px;
}
.selected {
background-color: silver;
}
.tab_content {
background-color: silver;
height: 400px;
}
p {
padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<div ng-app="myApp" ng-controller="MyMapCtrl">
<div class="tabs">
<div ng-click="selected = 'first'" ng-class="{'selected': selected == 'first'}" class="tab">first</div>
<div ng-click="selected = 'second'" ng-class="{'selected': selected == 'second'}" class="tab">second</div>
</div>
<div ng-show="selected == 'first'" class="tab_content">
<p>some content here...</p>
</div>
<div ng-show="selected == 'second'" class="tab_content">
<map id="map_canvas"></map>
</div>
</div>
编辑2
添加您的代码:modelsbyref="false"dorebildall="true"
<!DOCTYPE html>
<html ng-app="mymap">
<head>
<meta charset="utf-8" />
<title>AngularJS Plunker</title>
<script>document.write('<base href="' + document.location + '" />');</script>
<link href="style.css" rel="stylesheet" />
<link href="http://netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css" rel="stylesheet" />
<script data-semver="1.4.7" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js" data-require="angular.js@1.4.x"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>
<script src="http://rawgit.com/angular-ui/angular-google-maps/2.0.X/dist/angular-google-maps.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.0/angular-animate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-ui-bootstrap/0.14.3/ui-bootstrap-tpls.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<uib-tabset>
<uib-tab heading="FEATURED" active=true >
<br><br>
</uib-tab>
<uib-tab heading="RECENTLY USED">
<br><br>
RECENTLY USED
</uib-tab>
<uib-tab heading="TOP RATED" >
<br><br>
TOP RATED
</uib-tab>
<uib-tab heading="NEAR ME" ng-click="loadmap()">
<br><br>
<div class="single-map-view" id="mapview">
<ui-gmap-google-map modelsbyref="false" dorebuildall="true" center='fullmap.center' zoom='fullmap.zoom' refresh="true">
<ui-gmap-marker idkey="fullmap.id" coords="fullmap.center" events="fullmap.events"></ui-gmap-marker>
</ui-gmap-google-map>
</div>
</uib-tab>
</uib-tabset>
</body>
</html>
首先,这个问题是由引导选项卡和谷歌地图之间的冲突引起的。解决此问题的方法是将包含地图的选项卡实际放在ui-tabset
之外,并在用户单击相应的选项卡时显示/隐藏它。
<uib-tabset>
<uib-tab ng-click="hideMap()" heading="FEATURED" active=true >
<br><br>
</uib-tab>
<uib-tab ng-click="hideMap()" heading="RECENTLY USED">
<br><br>
RECENTLY USED
</uib-tab>
<uib-tab ng-click="hideMap()" heading="TOP RATED" >
<br><br>
TOP RATED
</uib-tab>
<uib-tab heading="NEAR ME" ng-click="showMap()">
</uib-tab>
</uib-tabset>
<div ng-if="isMapShown">
<br><br>
<div class="single-map-view" id="mapview">
<ui-gmap-google-map center='fullmap.center' zoom='fullmap.zoom' refresh="true">
<ui-gmap-marker idkey="fullmap.id" coords="fullmap.center" events="fullmap.events"></ui-gmap-marker>
</ui-gmap-google-map>
</div>
</div>
在控制器中,定义显示/隐藏地图功能:
app.controller('MainCtrl', function($scope) {
$scope.hideMap = hideMap;
$scope.showMap = showMap;
$scope.isMapShown = false;
function hideMap() {
$scope.isMapShown = false;
}
function showMap() {
$scope.isMapShown = true;
}
});
相关文章:
- 在Ionic应用程序上使用$.getScript加载谷歌地图Api
- 使用jquery时无法加载谷歌地图
- 谷歌应用程序脚本html服务和加载谷歌地图javascript api V3
- 无法从 .each 循环加载谷歌地图上的两个标记
- Framework7中未加载谷歌地图
- 如何重新加载谷歌地图图层
- Jquery 移动错误消息,当没有互联网连接加载谷歌地图
- 异步加载谷歌地图 V3 时将数据传递给回调
- Jquery移动检查时没有互联网连接显示错误消息,而不是加载谷歌地图
- 在异步加载谷歌地图时处理网络断开连接
- 如何测试一个脚本,用茉莉花加载谷歌地图
- KMZ文件在谷歌地球中加载,但不加载谷歌地图
- 打开浏览器时不会加载谷歌地图
- 异步加载谷歌地图 API
- 如何仅在我的应用 navigator.onLine 时加载谷歌地图 API
- 通过AJAX加载谷歌地图API,控制台错误
- 如何在没有标记内容的情况下加载谷歌地图
- 仅在Rails应用程序中的某些页面上加载谷歌地图脚本
- 如何使用Javascript在iframe中加载谷歌地图
- (懒惰)重构后加载谷歌地图不起作用