我想让一个同时使用AngularJS和RequireJS的应用程序运行起来。在这个设置中,我遇到了让我的OpenLayers库工作的问题。
我在main.js中设置了主要的AMD模块:
require.config(
{
baseUrl: 'scripts',
paths: {
// Vendor modules
angular: 'vendor/angular/angular',
openLayers: 'vendor/openlayers-debug',
other modules.....
},
shim: {
angular: {
exports: 'angular'
},
openLayers: {
exports: 'OpenLayers'
},
other modules....
}
}
);
require(['openLayers',
'angular',
'app',
'controllers/olMapController',
'directives/olMap',
other modules...
], function(OpenLayers) {
return OpenLayers;
}
);
然后在我用于初始化OpenLayers的Angular控制器中,我尝试指定openlayers-debug.js是一个依赖项:
define(['openLayers'],
function(OpenLayers) {
controllers.controller('olMapController', ['$scope', function(scope) {
console.log('Loaded olMapController. OpenLayers version: ' + OpenLayers.VERSION_NUMBER);
}]);
}
);
这好像不起作用。有时候olMapController函数会被执行,但大多数情况下不会。控制台则显示错误信息:
错误:[ng:areq] 参数'olMapController'不是一个函数,而是未定义的
所以,我想OpenLayers还没有完成加载,但一些require却认为它已经加载完了,并继续加载依赖于OpenLayers的代码,例如olMapController。然后它找不到它的依赖项,于是Angular返回此错误消息。或者什么类似的东西...? 有时会发生某些事情,使得OpenLayers快速加载到它作为依赖项时已经存在。我无法确定那是什么。
我省略了其他库和模块需要和定义,为了让代码易读。希望这个例子还是可理解的。
您有什么想法可以使openlayers加载正常吗?当我将['openLayers']依赖项从olMapController中删除时,错误消息消失了。
感谢您的任何帮助。
最好的问候, Martijn Senden
olMapController
的代码都是在其定义之前尝试使用它。可能是在'directives/olMap'
中的某些代码? - Louis