У меня есть страница JS с экземпляром Vue Js, в которую я импортирую компонент. Однако я получаю следующую ошибку:
Unknown custom element: - did you register the component correctly? For recursive components, make sure to provide the "name" option.
Атрибут имя правильный в экспортировать объект компонента, который я импортирую, поэтому мне интересно, что вызывает эту ошибку.
Компонент:
<template>
<GoogleMapLoader :mapConfig = "mapConfig" apiKey = "YOUR_API_KEY">
<template slot-scope = "{ google, map }">
<GoogleMapMarker
v-for = "marker in markers"
:key = "marker.id"
:marker = "marker"
:google = "google"
:map = "map"
/>
<GoogleMapLine
v-for = "line in lines"
:key = "line.id"
:path.sync = "line.path"
:google = "google"
:map = "map"
/>
</template>
</GoogleMapLoader>
</template>
<script>
import GoogleMapLoader from "./GoogleMapLoader";
import GoogleMapMarker from "./GoogleMapMarker";
import GoogleMapLine from "./GoogleMapLine";
import { mapSettings } from "./mapSettings";
export default {
name: "TravelMap",
components: {
GoogleMapLoader,
GoogleMapMarker,
GoogleMapLine
},
data() {
return {
markers: [
{ id: "here", position: { lat: 32.800359, lng: -117.021605 } },
{ id: "there", position: { lat: -51.628489, lng: -72.545818 } }
],
lines: [{
id: "1",
path: [{ lat: 32.800359, lng: -117.021605 }, { lat: -51.628489, lng: -72.545818 }]
}]
};
},
computed: {
mapConfig() {
return {
...mapSettings,
center: this.mapCenter
};
},
mapCenter() {
return this.markers[1].position;
}
}
};
</script>
import Vue from "vue";
Vue.config.productionTip = false;
import TravelMap from "./TravelMap";
new Vue({
el: "#App",
components: { TravelMap }
});
Вот также ссылка на песочницу со всем примером кода: https://codesandbox.io/s/yqqwwz0z1x
Не тот ответ. Я импортирую компонент перед экземпляром vue, и у меня есть раздел компонентов внутри инициализации Vue.
<travel-map class = "travel-map"/> В HTML нельзя использовать заглавные слова, вместо них следует использовать kebab Case. Также переименуйте свои компоненты Google, это должно быть <google-map-loader> и так далее.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Как указано в одном из комментариев, в HTML не допускаются заглавные слова.
Первым вариантом будет просто изменить тег TravelMap в index.html на <travel-map class = "travel-map" />.
Другой вариант — изменить создание экземпляра Vue.
Если вы измените содержимое тела из файла index.html на
<body>
<div id = "app" />
<!-- built files will be auto injected -->
</body>
и создайте свой экземпляр Vue вот так
new Vue({
el: "#app",
template: "<App/>",
components: { App }
});
App.vue будет записью вашего приложения, и внутри шаблона приложения вы сможете использовать то же имя, которое использовалось для импорта/регистрации компонента.
Ссылка на обновленную песочницу: https://codesandbox.io/s/50vo260nqp
Я понимаю, что теги HTML в верхнем регистре не допускаются, однако их использование в верхнем регистре не влияет на работу файла. В вашей обновленной песочнице, которая работает, она по-прежнему работает с прописными буквами. Я также понимаю, что добавление app.vue в качестве точки входа, как вы это сделали, заставит его работать, однако весь смысл этой проблемы заключался в том, чтобы упростить пример и заставить его работать без включения дополнительного файла.
@McWayWeb Изменение записи вашего приложения на компонент app.vue означает, что у вас нет таких проблем. Есть разница между файлом index.html и тегом <template> в компонентах. Вы не можете ссылаться на свой компонент, используя имя в верхнем регистре. Вы должны использовать чехол для кебаба. В части шаблона ваших компонентов вы можете использовать то же имя, которое вы использовали для регистрации компонента, например. TravelMap
В итоге я изменил его, чтобы вместо этого загружать компонент с помощью Ларавель:
Vue.component('google-map', require('../GoogleMaps/GoogleMap').default);
new Vue({
el: "#App"
});
возможный дубликат Неизвестный пользовательский элемент Vue.js