angular.js - 用angularjs的service封裝百度地圖api出錯,請問原因?
問題描述
我想用如下方式引入百度地圖服務,請問為什么出錯?
angular.module(’bmap’,[]) .factory(’bmapService’, [’$document’, ’$q’, ’$rootScope’,function($document, $q, $rootScope) { var map = $q.defer(); function onScriptLoad() {// Load client in the browser$rootScope.$apply(function() { map.resolve(window.bmap); }); } // Create a script tag with d3 as the source // and call our onScriptLoad callback when it // has been loaded var scriptTag = $document[0].createElement(’script’); scriptTag.type = ’text/javascript’; scriptTag.async = true; scriptTag.src = ’http://api.map.baidu.com/api?type=quick&ak=XXXX&v=1.0’; scriptTag.onreadystatechange = function () {if (this.readyState == ’complete’) onScriptLoad(); }; scriptTag.onload = onScriptLoad; var s = $document[0].getElementsByTagName(’body’)[0]; s.appendChild(scriptTag); return {bmap: function() { return map.promise; } };}]);
使用地圖服務(app依賴項已包含bmap,以下代碼為使用服務的controller)
app.controller(’backup’,function($rootScope,bmapService){ $rootScope.gotoBackup(); map = new bmapService.bmap().BMap.Map(’map’);})
百度給出的使用示例:
<!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,#l-map {width: 100%;height: 100%;overflow: hidden;margin:0;} </style> <script type='text/javascript' src='http://api.map.baidu.com/api?type=quick&ak=您的密鑰&v=1.0'></script> <title>顯示地圖</title> </head> <body> <p id='l-map'></p> </body></html> <script type='text/javascript'> var map = new BMap.Map('l-map'); map.centerAndZoom(new BMap.Point(116.404, 39.915), 14); </script>
問題解答
回答1:你的bmapService.bmap()返回的是一個promise對象,你要對promise對象使用then(function(){}),在回調方法中才能使用加載完成的地圖API
