我试图在Angular应用程序中使用 ArcGIS JavaScript API.我看到,它使用Dojo.所以,我正在尝试从Angular指令初始化ArcGIS,如下所示:
link: function (scope,element,attrs) {
    dojo.require('esri.map');
    var init = function () {
      console.log('dojo is ready');
      var map = new esri.Map("map-container",{
        center: [-111.3797,56.7266 ],zoom: 16,basemap: "streets"
      });
      map.enableScrollWheelZoom()

    };
    dojo.addOnLoad(init);
  }

看起来这样不是100%正确,因为当我尝试通过滚动鼠标滚轮缩放,我得到这个错误:

Uncaught TypeError: Cannot call method 'apply' of null

我的问题是如何在Angular应用程序中注入ArcGIS功能?

解决方法

我认为一个非常“AngularJS”风格的方法就像这样. (小提琴 http://jsfiddle.net/technicolorenvy/2Ke62/4/)

我喜欢使用角ui路由器,但这种方法也可以与Angular的$routeProvider一起工作.这里的魔法是在解决方案的对象中,可以选择“等待”,直到承诺得到解决,然后继续.

angular.module('webApp',['ui.router'])
    // module (app) config
    .config(function ($stateProvider,$urlRouterProvider) {

        $urlRouterProvider.otherwise('/map');

        $stateProvider.state('map',{
            url: '/map',template: '<div id="map"></div>',controller: 'MapCtrl',resolve: {
                promiSEObj: function ($q,$rootScope,wish) {
                    var deferred = $q.defer(),deps = {
                            Map: 'esri/map',FeatureLayer: 'esri/layers/FeatureLayer',InfoTemplate: 'esri/InfoTemplate',SimpleFillSymbol: 'esri/symbols/SimpleFillSymbol',SimpleRenderer: 'esri/renderers/SimpleRenderer',SimpleMarkerSymbol: 'esri/symbols/SimpleMarkerSymbol',ScaleDependentRenderer: 'esri/renderers/ScaleDependentRenderer',Color: 'dojo/_base/Color'
                        };

                    wish.loadDependencies(deps,function () {
                        deferred.resolve();
                        if (!$rootScope.$$phase) {
                            $rootScope.$apply();
                        }
                    });

                    return deferred.promise;
                }
            }
        });
    });

如上所述,我们有一个地图状态,具有解决方案.然后,您可以构建一个表示ArcGIS / Dojo依赖关系的对象,并将其传递给您的wish.loadDependencies(见下文).

使用q,我们将返回一个承诺,一旦所有依赖关系通过dojo的需求加载就解决

angular.module('webApp')
     // service that deals w/ our dojo require
    .service('wish',function () {

        // it's not require... it's a wish?
        var wish = {};

        function _loadDependencies(deps,next) {
            var reqArr = _.values(deps),keysArr = _.keys(deps);

            // use the dojo require (required by arcgis + dojo) && save refs
            // to required obs
            require(reqArr,function () {
                var args = arguments;

                _.each(keysArr,function (name,idx) {
                    wish[name] = args[idx];
                });

                next();
            });
        }

        return {
            loadDependencies: function (deps,next) {
                _loadDependencies(deps,next);
            },get: function () {
                return wish;
            }
        };
    });

之后,在您的MapCtrl中,您可以直接(通常情况下)调用所有ArcGIS / Dojo fns,通过在app config中构建的deps对象中使用的键,因为它们现在附加到由wish.get().

以下是此处找到的示例的修改版本(https://developers.arcgis.com/en/javascript/jssamples/renderer_proportional_scale_dependent.html)

angular.module('webApp')
    // our map controller
    .controller('MapCtrl',function ($rootScope,$scope,wish) {

        var w = wish.get(),greenFill = new w.Color([133,197,133,0.75]),greenOutline = new w.Color([133,0.25]),layer,markerSym,renderer1,renderer2,CROPS_URL = 'http://services.arcgis.com/V6ZHFr6zdgNZuVG0/arcgis/rest/services/USA_County_Crops_2007/FeatureServer/0';

        $scope.map = new w.Map('map',{
            center: [-98.579,39.828],zoom: 4,basemap: 'gray'
        });

        layer = new w.FeatureLayer(CROPS_URL,{
            outFields: ['STATE','COUNTY','M086_07','AREA'],infoTemplate: new w.InfoTemplate('${COUNTY},${STATE}','<div style="font: 18px Segoe UI">The percentage of the area of the county that represents farmland is <b>${M086_07}%</b>.</div>')
        });
        layer.setDeFinitionExpression('AREA>0.01 and M086_07>0');


        markerSym = new w.SimpleMarkerSymbol();
        markerSym.setColor(greenFill);
        markerSym.setoutline(markerSym.outline.setColor(greenOutline));
        renderer1 = new w.SimpleRenderer(markerSym);
        renderer1.setProportionalSymbolInfo({
            field: 'M086_07',minSize: 1,maxSize: 10,minDataValue: 0,maxDataValue: 100
        });

        //for the second renderer increase the dot sizes and set a backgroundFillSymbol
        renderer2 = new w.SimpleRenderer(markerSym);
        renderer2.setProportionalSymbolInfo({
            field: 'M086_07',minSize: 5,maxSize: 15,maxDataValue: 100
        });

        layer.setRenderer(new w.ScaleDependentRenderer({
            rendererInfos: [{
                'renderer': renderer1,'minScale': 50000000,'maxScale': 10000000
            },{
                'renderer': renderer2,'minScale': 0,'maxScale': 5000000
            }]
        }));

        $scope.map.addLayer(layer);
    });

工作小提琴演示了上述代码,在这里找到了http://jsfiddle.net/technicolorenvy/2Ke62/4/

javascript – AngularJS ArcGIS的更多相关文章

  1. Android Studio是否支持用于Android UI设计的AngularJS?

    我对AndroidStudio有疑问:AS在设计XML文件时是否支持AngularJS代码,例如:对于小动画或效果?

  2. android – 如何使用ClientID和ClientSecret在Phonegap中使用Angularjs登录Google OAuth2

    我正尝试使用Angularjs(使用IonicFramework)通过GoogleOAuth2从我的Phonegap应用程序登录.目前我正在使用http://phonegap-tips.com/articles/google-api-oauth-with-phonegaps-inappbrowser.html进行登录.但是当我使用Angular-UI-RouterforIonic时,它正在创建非常

  3. 利用require.js与angular搭建spa应用的方法实例

    这篇文章主要给大家介绍了关于利用require.js与angular搭建spa应用的方法实例,文中通过示例代码给大家介绍的非常详细,对大家的理解和学习具有一定的参考学习价值,需要的朋友们下面跟着小编来一起看看吧。

  4. 详解Angular动态组件

    本文主要介绍了Angular动态组件,对此感兴趣的同学,可以亲自实验一下。

  5. 详解如何使用webpack+es6开发angular1.x

    本篇文章主要介绍了详解如何使用webpack+es6开发angular1.x,具有一定的参考价值,有兴趣的可以了解一下

  6. angular2系列之路由转场动画的示例代码

    本篇文章主要介绍了angular2系列之路由转场动画的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  7. 一种angular的方法级的缓存注解(装饰器)

    本篇文章主要介绍了一种angular的方法级的缓存注解(装饰器),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  8. 动手写一个angular版本的Message组件的方法

    本篇文章主要介绍了动手写一个angular版本的Message组件的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  9. angular forEach方法遍历源码解读

    这篇文章主要为大家详细了angular forEach方法遍历源码,forEach()方法用于遍历对象或数组,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. Angular的MVC和作用域

    本文主要Angular的MVC和作用域进行详细分析介绍,具有一定的参考价值,下面跟着小编一起来看下吧

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部