Я пытаюсь запустить приложение, использующее как AngularJS, так и RequireJS. У меня возникают проблемы с тем, что моя библиотека OpenLayers работает в этой настройке.Использование OpenLayers с RequireJS и AngularJS
Я установил основные AMD-модули в main.js:
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, я стараюсь, чтобы указать, что OpenLayers-debug.js является зависимость :
define(['openLayers'],
function(OpenLayers) {
controllers.controller('olMapController', ['$scope', function(scope) {
console.log('Loaded olMapController. OpenLayers version: ' + OpenLayers.VERSION_NUMBER);
}]);
}
);
Ну, это не работает. ИНОГДА выполняется функция olMapController, но в основном нет. Консоль затем просто выводит сообщение об ошибке с указанием:
Error: [ng:areq] Argument 'olMapController' is not a function, got undefined
Так что, я думаю, OpenLayers не закончил загрузку еще, но почему-то требуют думает, что имеет, и продолжает загрузку кода, который зависит от OpenLayers, в этом случае olMapController. Затем он не может найти свою зависимость, после чего Angular возвращает это сообщение об ошибке. Или что-то типа того...? Иногда случается что-то, что заставляет OpenLayers загружаться достаточно быстро, чтобы он присутствовал, когда он загружается как зависимость. Что это, я не могу сказать.
Я забыл, что другие библиотеки и модули требуют и определяют, чтобы код читался. Надеюсь, что этот пример по-прежнему понятен.
Любые идеи о том, что я мог бы сделать, чтобы заставить openlayers хорошо загружаться? Сообщение об ошибке исчезает, когда я покидаю зависимость ['openLayers']
от olMapController.
Заранее благодарим за любую помощь.
С наилучшими пожеланиями, Мартейн Senden
ошибка, что вы показываете не предполагает, что OpenLayers еще не загружен. Это предполагает, что любой код пытается использовать 'olMapController' пытается использовать его до его определения. Может быть, какой-то код в '' директивах/olMap''? – Louis
Контроллер в примере кода, который я дал, требует только OpenLayers. В моем реальном приложении это требует большего. Когда я удаляю из него зависимость OpenLayers, ошибка исчезает. Вот почему я думаю, что OpenLayers еще не загружен. Директива olMap не слишком много. Он создает новую карту OpenLayers, используя класс, определенный в контроллере. – Martijn