如题,我在directive里面定义了百度地图的异步加载,可是在加载完成后浏览器提示没有找到那个回调,请问如何定义可以让回调执行起来?
app.directive('bdmap', [ function(){
return {
restrict: 'E',
template: '<div id="position_jsop">the detail of map</div><div id="allmap">mapview</div>',
transclude: true,
link: function($scope, iElm, iAttrs, controller) {
var map = {
options:{
enableHighAccuracy:true,
maximunAge:3000,
timeout:45000,
},
loadMapScript:function(){
var self = this
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://api.map.baidu.com/api?v=2.0&ak=xcjT5073PywMq4XHWxXG8yfF&callback=map.initMap"; //就是这里,它会执行一次map.initMap之前map在window下是可以运行initmap的,放在directive里面就不可以了
document.getElementById(self.instanceData.scriptPutId).appendChild(script);
var script_coverter = document.createElement("script");
script_coverter.type = "text/javascript";
script_coverter.src = "http://developer.baidu.com/map/jsdemo/demo/convertor.js"
document.getElementById(self.instanceData.scriptPutId).appendChild(script_coverter);
},
initMap:function(){
},
请问遇到这种问题该如何解决?
百度地图url上得
callback=map.initMap
查找的window作用于下的对应方法。而楼主代码中定义的回调方法是存放在 directive 自己的私有作用于内,百度当然找不到。所以最后还是应该把回调函数定义在window下。如果需要有多个回调,可以尝试用对象存储一个地图回调集合, directive中通过 key 来制定对应的回调函数。