angular.js - 用angularjs的service封装百度地图api出错,请问原因?
我想大声告诉你
我想大声告诉你 2017-05-15 16:51:38
[AngularJS讨论组]

我想用如下方式引入百度地图服务,请问为什么出错?

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');
})

百度给出的使用示例:

  
  
  
  
  
  
  
显示地图  
  
  

我想大声告诉你
我想大声告诉你

全部回复(1)
高洛峰

你的bmapService.bmap()返回的是一个promise对象,你要对promise对象使用then(function(){}),在回调方法中才能使用加载完成的地图API

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号