@mirikkingg

Как правильно глобально зарегистрировать компоненты Vue?

Как правильно глобально регистрировать компоненты?

Есть следующий компонент:
<template>
      <header class="nav container-fluid pt-3">
        <h1 class="title">CCJ Music</h1>
        <h2>Charts</h2>
        <h2>Albums</h2>
      </header>
</template>
    
<script>
    export default {
        name: 'MainHeader'
    }
</script>


Он импортирован в js файле который находится в корневой папке с компонентами.
DI8Ou.png
Туда так же попадут остальные компоненты и буду экспортированы как массив

import MainHeader from '@/components/UI/hard/mh.vue'

export default [
    MainHeader,
]


В main.js регистрирую все компоненты:
import components from '@/components/UI/library.js';

const app = createApp(App)

components.forEach(component => {
    app.component(component.name, component)
})


Все правильно регистрирует, но почему то при использовании его в экземпляре он не работает:
Y9P0Q.png

Вот экземпляр:
<template>

  <MainHeader></MainHeader>

</template>

<script>
export default {
  components: {
    // когда регистрирую его тут, он не может его найти, а если импортировать его, то какой тогда в этом смысл?
   // https://i.gyazo.com/bb84ef3ac0719c0d7155411debde9612.png
  }
}
</script>
  • Вопрос задан
  • 303 просмотра
Решения вопроса 1
@mirikkingg Автор вопроса
В файле App не получится использовать глобально зарегистрированные компоненты.
Моя проблема заключалась в том что я использовал KebabCase когда как в js необходимо использовать CamelCase, после этого в любом компоненты по мимо App.vue все компоненты можно использовать без импортов и прочей херни.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Попробуй другой подход.

1. library.js пусть экспортирует функцию, например:

import MainHeader from '@/components/UI/hard/mh.vue'

export default (app) => {
  app.component('MainHeader', MainHeader)
}


2. main.js

import components from '@/components/UI/library.js';

const app = createApp(App)

components(app)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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