Я работаю над проектом, использующим OpenLayers 6 в ES6 с Webpack.
Это мой первый настоящий проект ES6, и я хочу сделать его организованным (и немного модульным), но я борюсь с использованием импорта и экспорт.
Сейчас моя структура:
- all.js
- map/
- index.js
- gpx.js
Файл all.js
является «точкой входа».
все. js
import 'ol/ol.css';
import map from './map/index';
import { vector as GPXvector } from './map/gpx';
map.addLayer(GPXvector);
карта / индекс. js
import { Map, View } from 'ol';
import { OSM } from 'ol/source';
import { Tile as TileLayer } from 'ol/layer';
const map = new Map({
layers: [
new TileLayer({
source: new OSM()
})
],
target: 'map',
view: new View({
center: [1037749, 5135381],
zoom: 10
})
});
export { map as default };
карта / гпкс. js
import { Vector as VectorLayer } from 'ol/layer';
import { Circle as CircleStyle, Fill, Stroke, Style } from 'ol/style';
import { unByKey } from 'ol/Observable';
import VectorSource from 'ol/source/Vector';
import GPX from 'ol/format/GPX';
import map from './index.js'; // Is that good ??
const style = {
// [...] Some style here
};
const source = new VectorSource({
url: 'test.gpx',
format: new GPX()
});
var onChange = source.on('change', function() {
if (source.getState() == 'ready') {
map.getView().fit(source.getExtent()); // Access to "map" from "index.js" HERE
unByKey(onChange);
}
});
const vector = new VectorLayer({
source: source,
style: function (feature) {
return style[feature.getGeometry().getType()];
}
});
export { vector, source };
Я хочу получить доступ к экземпляру map
(инициализированному в map/index.js
) из файла map/gpx.js
(см. Комментарий в исходном коде).
Но мне кажется, что я импортирую map
из map/index.js
внутри all.js
, который импортирует map/gpx.js
, который сам также импортирует map
из map/index.js
.
Мне кажется, что это какой-то импорт «l oop», где будет беспорядок для обработки порядка импорта, например, когда я получу больше файлов в моем проекте. 1036 1042 *
все. js
import 'ol/ol.css';
import map from './ntrak/index';
import MyGPX from './ntrak/gpx';
const gpx = new MyGPX(map, 'test.gpx');
map / gpx. js
import { Vector as VectorLayer } from 'ol/layer';
import { Circle as CircleStyle, Fill, Stroke, Style } from 'ol/style';
import { unByKey } from 'ol/Observable';
import VectorSource from 'ol/source/Vector';
import GPX from 'ol/format/GPX';
const style = {
// [...] Some style here
};
const _onSourceChange = function(map, source) {
if (source.getState() == 'ready') {
map.getView().fit(source.getExtent());
unByKey(_onSourceChange);
}
}
export default class {
constructor(map, url, fit = true) {
this.map = map;
this.url = url;
this.fit = fit;
this.loadGPX();
}
loadGPX() {
this.source = new VectorSource({
url: this.url,
format: new GPX()
});
if (this.fit) {
this.source.on('change', () => _onSourceChange(this.map, this.source));
}
this.vector = new VectorLayer({
source: this.source,
style: function(feature) {
return style[feature.getGeometry().getType()];
}
});
this.map.addLayer(this.vector);
}
};
Думаю, это круто, потому что он позволяет получить несколько векторов GPX на одном экземпляре карты.
Но если я хочу делать больше вещей, которые взаимодействуют с моим источником или вектором GPX, мне нужно будет каждый раз передавать экземпляр, а не просто импортировать файл GPX напрямую .
Как вы думаете?