Компонент ошибки не определен при использовании дочернего тега в экземпляре vue

Я только начал изучать vuejs и попытался запустить небольшой код, применив то, что я узнал, создав базовый компонент внутри экземпляра vue с помощью Vue.component('nameOfComponent', { });, но ничего не отображается, и я получил Uncaught ReferenceError: HelloWorld не определен

В чем ошибка в следующем коде?

<html>
<head>
<head>
<body>
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>


<div id = "app">
  <HelloWorld @updated = "fct" :numb = "firstNumb"/>
</div>

<script type = "text/javascript">
Vue.component('HelloWorld', { 
  template:'<h1 @click = "mymeth">{{" click to increase !}}{{ numb }}</h1>',
  props: {
    numb: Number
  },
  methods:{
    mymeth(){
     this.$emit('updated', this.numb+1);
    console.info("value firstNumb in child component ", this.numb)
    },
  }
});
new Vue({
 'el':'#app',
 data:{
      firstNumb:5,
},
components: { HelloWorld },

 methods:{
     fct(e){
    this.firstNumb=e;
    console.info("value firstNumb in parent component ", this.firstNumb)
    },
 
 }
 });
 
 </script>
 </body>
 </html>
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сразу следует отметить, что Vue 2 достиг EOL (конца срока службы), и вам, если что, следует изучать Vue 3. В любом случае, на ваш вопрос...

Компоненту необходимо назначить переменную, чтобы на него можно было правильно ссылаться внутри new Vue()

const HelloWorld = Vue.component(...)
new Vue({
  ...
  components: { HelloWorld },
  ...
})

Также при добавлении пользовательских элементов непосредственно в DOM вы должны использовать kebab-case, как указано в документации Vue 2:

только имена кебаб-кебаба действительны непосредственно в DOM

<div id = "app">
  <hello-world @updated = "fct" :numb = "firstNumb"/>
</div>

После исправления нескольких других мелких ошибок/опечаток рабочий код представлен ниже:

<html>
<head>
<head>
<body>
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>


<div id = "app">
  <hello-world @updated = "fct" :numb = "firstNumb"/>
</div>
<script>

const HelloWorld = Vue.component('HelloWorld',{
  template:'<h1 @click = "mymeth">click to increase ! {{ numb }}</h1>',
  props: {
    numb: Number
  },
  methods:{
    mymeth(){
      this.$emit('updated', this.numb+1);
      console.info("value firstNumb in child component ", this.numb)
    },
  }
});

new Vue({
  el : '#app',
  data() {
    return {
      firstNumb: 5
    }
  },
  components: { HelloWorld },
  methods:{
    fct(e){
      this.firstNumb=e;
      console.info("value firstNumb in parent component ", this.firstNumb)
    },
  }
});
</script>
</body>
</html>
components: { HelloWorld } не нужен, потому что Vue.comComponent регистрирует HelloWorld глобально, это либо тот, либо другой
Estus Flask 24.05.2024 23:20

под «добавлением пользовательских элементов непосредственно в DOM» вы имеете в виду создание компонента с помощью Vue.component, верно? еще для этой заметки «Компоненту необходимо назначить переменную, чтобы на него правильно ссылались в новом Vue()» в некоторых уроках на YouTube Vue.component(...) использовалось так же, как и я, интересно, как это сработало для них

ftouh yaham 25.05.2024 01:00

да, см. комментарий Эстуса. Я не так часто использую Vue без этапа сборки, поэтому не знал о том, что он зарегистрирован во всем мире. Возможно, в данном случае понадобилась только коррекция шашлыка.

yoduh 25.05.2024 16:33

хорошо, но почему значение дочернего элемента отображает значение меньше 1 по сравнению с родительским? (exp: значение firstNumb в родительском компоненте 6 VS значение firstNumb в дочернем компоненте 5) предполагается, что дочернему компоненту также 6 после отправки this.numb+1 и обновления в родительском компоненте, я ошибаюсь?

ftouh yaham 26.05.2024 00:40

журналы консоли показывают значение только в определенный момент времени. после отправки вы сразу же регистрируете консоль. Требуется немного больше времени, чтобы захватить событие в родительском элементе, установить новое значение, а затем обновить свойство обратно в дочернем элементе. тот факт, что пользовательский интерфейс показывает 6, который отображается в дочернем элементе, мы знаем, что значение свойства на самом деле обновляется.

yoduh 26.05.2024 01:16

так как это занимает немного больше времени, я думаю, если я settimeout до завершения обновления, я получу хороший дисплей?

ftouh yaham 27.05.2024 12:18

это не проблема вашего приложения, проблема в том, как вы пытаетесь его отладить. не рекомендуется добавлять тайм-ауты в ваш код только для целей регистрации. лучше отлаживать реактивные переменные, проверяя их значения в шаблоне (который у вас уже есть), используя что-то вроде наблюдателя , который может регистрировать момент обнаружения изменения значения, или используя более продвинутые инструменты отладки, такие как ️ 🔁 vue devtools

yoduh 27.05.2024 18:27

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

Похожие вопросы