我很困惑使用哪一个。我目前正在使用 angular mapbox --> http://inkblot.io/angular-mapbox,但是文档没有解释我想要的某些功能,例如如何将 API 调用中的标记与线条连接以及如何使地图居中生成时在标记上。Angular Mapbox 非常适合使用 $scope 来呈现数据,但我正在考虑切换到其他东西以拥有这些其他功能。有谁知道一个简单的解决方案,使用带有 $scope 的 ngrepeat 渲染数据,将这些标记与线条连接起来,并在生成这些标记时使地图居中?
1 回答
为什么不编写您自己的简单指令,将地图实例传递给您的控制器范围,以便您可以充分利用 mapbox js api?Angular 可用的指令,例如您链接的指令,angular-leaflet-directive 和 angular-google-maps 非常臃肿和复杂,以至于您最终会从一个缓慢的应用程序开始。如果你只显示几个标记和折线,那简直是矫枉过正,会让你发疯似的陷入困境。此外,在大多数情况下,这些文档记录不充分,更新且大多不完整(到目前为止还没有完整的 api 覆盖),我认为这是一个糟糕的选择。(非常尊重这些项目的开发者)
可以这么简单,模板:
<mapbox callback="callback"></mapbox>
对于指令:
angular.module('app').directive('mapbox', [
function () {
return {
restrict: 'EA',
replace: true,
scope: {
callback: "="
},
template: '<div></div>',
link: function (scope, element, attributes) {
L.mapbox.accessToken = 'YOUR PUBLIC MAPBOX KEY';
var map = L.mapbox.map(element[0], 'YOUR MAP PROJECT ID');
scope.callback(map);
}
};
}
]);
现在在您的控制器中使用它:
angular.module('app').controller('rootController', [
'$scope',
function ($scope) {
$scope.callback = function (map) {
map.setView([51.433333, 5.483333], 12);
};
}
]);
该指令初始化地图,将地图实例传递回您的控制器范围,然后您就可以开始做任何您喜欢的事情了。我在 Plunkr 上有一个工作示例,但 Mapbox 使示例键和映射无效。我有一个完整的工作示例,但它不使用 Mapbox,它使用 Leaflet,但原理保持不变,您可以在这里进行测试:http ://plnkr.co/edit/gax5NL7DX2PWmJXKP9YD?p=preview
找到了 mapbox 示例,请记住它不会加载图块,因为令牌已过期或已被删除:http ://plnkr.co/edit/OpVhUKLryW8rbEtJ8jgh?p=preview