AngularJS 应用程序中的 ArcGIS Javascript - 加载模块时出错

ArcGIS Javascript in AngularJS App - Error Loading Modules

我有一个 AngularJS 应用程序,它使用 ArcGIS API for JavaScript 来显示地图。

我一直在使用单独的 require 语句,例如:

var esriMap = require("esri/map");

这对除 Dojo layout Dijits 以外的所有模块都有效。当我尝试添加这样的 require 语句时:

var Scalebar = require("esri/dijit/Scalebar");

我收到以下错误:

Error: undefinedModule(…) "Error: undefinedModule at Error (native) at d (http://js.arcgis.com/3.12/init.js:15:382) at La (http://js.arcgis.com/3.12/init.js:24:296) at r (http://js.arcgis.com/3.12/init.js:15:476)

如果可能的话,我想继续使用单独的 require 语句。为什么我只在 dijit 模块上会收到此错误?

单参数require 仅适用于已经加载的模块。根据 undefinedModule 错误判断,您正试图在从未加载的模块上使用单参数 require。要引用尚未加载的模块,需要使用标准的 AMD require 语法:

require([
    'dijit/layout/StackContainer',
    ...
], function (StackContainer, ...) {
    ...
});

总是使用这种格式通常是最简单的。 (它也可以被认为更可靠,因为否则你可能会依赖于你正在使用的模块已经加载的假设,无论是直接还是间接作为依赖项。)

此外,我不知道您是否看到过这个,但 Esri 确实有一些 angular 模块可以帮助将地图集成到 Angular 应用程序中:

https://github.com/Esri/angular-esri-map

其中包括一个名为 esriLoader 的服务,该服务包装了 Dojo 的要求,并允许您传递将接收模块的回调或获得作为模块数组解析的承诺。