ui-bootstrap 选项卡中的 Mapbox 地图未加载图块
Mapbox map in ui-bootstrap tab not loading tiles
我正在尝试将 mapbox 地图放入 angular-ui-bootstrap 选项卡中,似乎 some/most 的图块没有得到在初始化时加载,并且在您在地图上平移时不会被请求。在 ui-bootstrap 标签集之外,地图工作得很好。
没有抛出任何错误,但查看对图块的请求,其中许多只是出于某种原因未被请求。我什至不确定如何调试这个。
关于可能发生的事情有什么想法吗?
Here is a plunkr showing the issue
这是一个示例 angular 应用程序,它将显示问题
var app = angular.module('app', ['ui.bootstrap'])
app.controller('mapCtrl', ['$scope', '$timeout', function($scope, $timeout) {
$scope.val = 123
}]);
app.directive('myMap', function() {
return {
restrict: 'E',
template: "<div id='map_container'></div>",
link: function ($scope, elem, attrs) {
mapDiv = elem.find('#map_container')
L.mapbox.accessToken = 'pk.eyJ1IjoicmVwdGlsaWN1cyIsImEiOiJlSWZtN1hZIn0.FfT3RxbfRYv4LIjBxXG5fw';
var map = L.mapbox.map(mapDiv[0], 'examples.map-i86nkdio')
.setView([40, -74.50], 9);
}
};
});
地图在地图容器不可见时被初始化,这就是它失败的原因。您在调用 invalidateSize
的正确路径上,但您需要在选项卡可见时执行此操作。我看到你已经设置了一个事件,你可以在你的指令 link 函数中挂钩它:
$scope.$on('tabSelect:map', function (t) {
$timeout(function () {
map.invalidateSize(true);
});
});
没有超时是不行的。它需要某种延迟,以便选项卡在触发 invalidateSize
之前完全可见。这是一个更新的 Plunker:http://plnkr.co/edit/gzwx2pZ1GjBZDE8Utxfl?p=preview
我正在尝试将 mapbox 地图放入 angular-ui-bootstrap 选项卡中,似乎 some/most 的图块没有得到在初始化时加载,并且在您在地图上平移时不会被请求。在 ui-bootstrap 标签集之外,地图工作得很好。
没有抛出任何错误,但查看对图块的请求,其中许多只是出于某种原因未被请求。我什至不确定如何调试这个。
关于可能发生的事情有什么想法吗?
Here is a plunkr showing the issue
这是一个示例 angular 应用程序,它将显示问题
var app = angular.module('app', ['ui.bootstrap'])
app.controller('mapCtrl', ['$scope', '$timeout', function($scope, $timeout) {
$scope.val = 123
}]);
app.directive('myMap', function() {
return {
restrict: 'E',
template: "<div id='map_container'></div>",
link: function ($scope, elem, attrs) {
mapDiv = elem.find('#map_container')
L.mapbox.accessToken = 'pk.eyJ1IjoicmVwdGlsaWN1cyIsImEiOiJlSWZtN1hZIn0.FfT3RxbfRYv4LIjBxXG5fw';
var map = L.mapbox.map(mapDiv[0], 'examples.map-i86nkdio')
.setView([40, -74.50], 9);
}
};
});
地图在地图容器不可见时被初始化,这就是它失败的原因。您在调用 invalidateSize
的正确路径上,但您需要在选项卡可见时执行此操作。我看到你已经设置了一个事件,你可以在你的指令 link 函数中挂钩它:
$scope.$on('tabSelect:map', function (t) {
$timeout(function () {
map.invalidateSize(true);
});
});
没有超时是不行的。它需要某种延迟,以便选项卡在触发 invalidateSize
之前完全可见。这是一个更新的 Plunker:http://plnkr.co/edit/gzwx2pZ1GjBZDE8Utxfl?p=preview