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 的要求,并允许您传递将接收模块的回调或获得作为模块数组解析的承诺。
我有一个 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 的要求,并允许您传递将接收模块的回调或获得作为模块数组解析的承诺。