AngularJS服务初始化并获得第三方组件

时间:2016-02-22 13:28:34

标签: javascript angularjs

我正在使用angularjs和esri arcgis构建以地图为中心的应用程序。

我想创建一个单独的服务,它提供一个getMap方法,它将返回地图(在初始化之后)和一个执行初始化的initMap方法:

// in my controller:
MapService.initMap();
$scope.map = MapService.getMap();

MapService.js:

angular.module('app')
    .service('MapService',  function($q, esriLoader) {
        var deferred = $q.defer();

        this.getMap = function(){
            if ( angular.isDefined( deferred ) ) return $q.when( deferred );
        }

        var self = this;
        this.initMap = function() {

            esriLoader.require(['esri/Map'],
                function(Map) { 

                    console.log('require callback');

                    // Create the map
                    self.map = new Map({
                        basemap: 'satellite'
                    });


                    console.log('resolve map');

                    deferred.resolve(map);


                });

        }

    });

我在deferred.resolve(map)行收到错误,因为deferred未定义。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

试试这个:

this.getMap = function(){
    return deferred.promise;
};

然后使用:

MapService.getMap().then(function (map) {

});