首先,我想在angular里实现异步加载百度地图api后调用相关回调,
百度地图官方给出的地图异步加载的例子是这样的:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
</style>
<title>异步加载地图</title>
</head>
<body>
<div id="allmap"></div>
</body>
</html>
<script type="text/javascript">
//百度地图API功能
function loadJScript() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://api.map.baidu.com/api?v=2.0&ak=您的密钥&callback=init"; //<-注意 callback回调,同步加载没有&callback
document.body.appendChild(script);
}
function init() {
var map = new BMap.Map("allmap"); // 创建Map实例
var point = new BMap.Point(116.404, 39.915); // 创建点坐标
map.centerAndZoom(point,15);
map.enableScrollWheelZoom(); //启用滚轮放大缩小
}
window.onload = loadJScript; //异步加载地图
</script>
我在angular相关指令里已经成功异步加载地图了,回调已设置为&callback=init,init回调方法是百度api内自己调用的,自己只需要定义好的就行,结果问题来了, init回调函数定义了,但init一直都没有被调用,地图都加载了,为什么回调函数没有被调用?我把代码块放到普通的script标签里运行能正常被调用,难道是angular本身的原因?
给你一个实际demo吧:
Plunker
angular.module('demo', []).service('BaiduMap', function($window, $document, $q){
var promise;
this.load = function(){
if(promise){
return promise;
}
promise = $q(function(resolve, reject){
$window.initMap = function(){
resolve();
return;
};
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://api.map.baidu.com/api?v=2.0&ak=E4805d16520de693a3fe707cdc962045&callback=initMap";
$document[0].body.appendChild(script);
});
return promise;
};
});
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。