Оберните переменные библиотеки google-closure-library для углового проекта

Итак, продолжая этот вопрос

Теперь у меня есть модуль как в bower, так и в npm, я могу импортировать его в свой проект и объявить в app.module, даже попытавшись использовать его в своем контроллере:

index.html:

<script src = "bower_components/google-closure-library/closure/goog/base.js"></script>

app.module.js:

angular
        .module('drugQualityDataManagerApp', [
            'ngStorage',
            'ngResource',
            'ngCookies',
            'ngAria',
            'web-gl-earth2',

uploadData.controller.js:

$scope.initializeMapWebGL = function(){
                var earth = new webGlEarth.map('earth_div');
                webGlEarth.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png').addTo(earth);

                var marker = webGlEarth.marker([51.5, -0.09]).addTo(earth);
                marker.bindPopup("<b>Hello world!</b><br>I am a popup.<br /><span style='font-size:10px;color:#999'>Tip: Another popup is hidden in Cairo..</span>", {maxWidth: 150, closeButton: true}).openPopup();

                var marker2 = webGlEarth.marker([30.058056, 31.228889]).addTo(earth);
                marker2.bindPopup("<b>Cairo</b><br>Yay, you found me!", {maxWidth: 120, closeButton: false});

                var markerCustom = webGlEarth.marker([50, -9], '/img/logo-webglearth-white-100.png', 100, 24).addTo(earth);

                earth.setView([51.505, 0], 6);
            };

uploadData.html:

<style>
    html, body{padding: 0; margin: 0; background-color: black;}
    #earth_div{top: 0; right: 0; bottom: 0; left: 0; position: absolute !important;}
</style>
<title>WebGL Earth API: Markers</title>
<body onload = "initialize()">
<div id = "earth_div"></div>
</body>

Но, конечно, все будет не так просто, проблема возникает из-за зависимостей webglearth2, это приложение сильно зависит от библиотеки google-closure-library, а angular это не нравится, я пробовал обернуть файл main.js, например:

(function () {
    'use strict';
    angular.module('web-gl-earth2', []).provider('webGlEarth');

Я добавил google-closure-library в свои bower_components и в app.module.js, но все равно получаю ужасное:

Uncaught ReferenceError: goog is not defined

Итак, у меня остался вопрос: есть ли автоматическая оболочка, которая поможет мне интегрировать этот модуль в angular, или я обречен переписывать весь исходный код, чтобы сделать его «привлекательным для angular»?

«обречены переписать весь первоисточник» - такая драма. Если вам нужно иметь больший контроль над процессом инициализации, вы можете вместо этого использовать метод ручной начальной загрузки. Примеры того, когда вам нужно это сделать, включают использование загрузчиков скриптов или необходимость выполнить операцию до того, как AngularJS скомпилирует страницу. См. Руководство разработчика AngularJS - Начальная загрузка.

georgeawg 18.05.2018 16:58

«обречены переписать весь первоисточник» - такая драма. Что ж, не поймите меня неправильно, я бы с радостью взялся за эту задачу, но мой архитектор вряд ли одобрил бы такое использование ресурсов. Спасибо за советы, обязательно попробую (в свое время)

Steven 18.05.2018 17:08

Функция $scope.initializeMapWebGL должна быть перемещена в настраиваемая директива, а onload = "initialize()" должна быть перемещена в функцию построения поставщика webGlEarth.

georgeawg 18.05.2018 17:19

Спасибо! Я имел в виду, что структура кода не идеальна, но я просто пытался проверить, будет ли приложение читать модуль, на самом деле AngularJS - это первый шаг, мне действительно нужно было бы затем переместить модуль в Typescript, чтобы я мог, наконец, интегрировать его в проект Angular (это 2+)

Steven 18.05.2018 17:21
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
69
0

Другие вопросы по теме