#vue.js #vuejs2 #vue-component #web-component #vue-cli
#vue.js #vuejs2 #vue-компонент #веб-компонент #vue-cli
Вопрос:
У меня возникли проблемы с импортом моего пользовательского компонента в мое устаревшее приложение. Я предварительно скомпилировал свой SFC как веб-компонент с помощью vue-cli builder, и я импортирую в свой main.js файл таким образом :
import * as HelloWorld from '../dist/hello-world.js'
Vue.component('hello-world',HelloWorld); //if I add my component globally (same _Ctor error)
Затем я загружаю свое приложение в div контейнера :
var app = new Vue({
el:"#container",
data: {
test: 'Vue is init !' //just a test to validate init
},
components:{
HelloWorld //my web component locally (same _Ctor error)
}
});
Когда мое приложение загружается, я получаю эту ошибку JS…
Я заметил, что при загрузке страницы без следующего тега компонента :
<hello-world></hello-world>
ошибка не выдается, и если я добавлю тег компонента через JS после загрузки страницы, компонент работает правильно.
Если я добавлю этот компонент за пределы моей области Vue.el (#container), он тоже работает.
Тем не менее, я хотел бы добавить этот компонент в #container .
Я импортирую Vue 2 через CDN. Похоже на ошибку загрузки или сборки, но я не могу ее получить.
Спасибо за вашу помощь.
hello-world.js является предварительно скомпилированным .Файл VUE с vue-cli, просто тестовый файл, фиксирующий некоторые события :
<template>
<h1 v-on:click="clickon"
v-on:mouseenter="addone"
>{{msg}}</h1>
</template>
<script>
export default {
name: "HelloWorld",
data() {
return {
msg: 'Hello world!'
}
},
methods : {
clickon: function () {
// `this` inside methods points to the Vue instance
alert('Clicked')
},
addone: function(){
this.msg = 'Mouse entered'
},
}
}
</script>
<style>
h1{
color:red;
}
</style>
Предварительно скомпилировано с :
vue build --target wc HelloWorld.vue
Комментарии:
1. Проблема специфична для hello-world.js . Вы его не показали
2. Я отредактировал свой пост, hello-world.js является предварительно скомпилированным . Файл VUE, содержимое этого. VUE в исходном сообщении. Спасибо.
3. Это экспорт по умолчанию, поэтому он должен быть импортом по умолчанию, а не
*
. Вероятно, проблема здесь.4. Я попытался: импортировать HelloWorld из ‘../dist/hello-world.js «. Результат: запрошенный модуль ‘..’ не предоставляет экспорт с именем ‘default’
5. Он не просто предварительно скомпилирован, он скомпилирован как веб-компонент. См. cli.vuejs.org/guide/build-targets.html#web-component . Вам вообще не нужно импортировать компонент HelloWorld. Это не компонент. Это веб -компонент
Ответ №1:
Он заработал, создав его с --target
помощью библиотеки lib и импортировав мой JS-файл с помощью:
import '../dist/HelloWorld.umd.js';
Затем его можно добавить в мой экземпляр Vue с помощью:
components:{
"hello-world":HelloWorld
}
Кажется, это правильный способ сделать это; веб-компоненты не могут быть импортированы таким образом.