В моем приложении проекта vue / cli 4 / vuex / bootstrap - vue у меня есть большая страница списков объявлений с определенными модальными диалогами, и я хочу переместить диалоги в отдельный файл *. vue, так как эти диалоги будет использоваться и на других страницах. Для связи, когда диалог должен быть открыт, я генерирую события, и эти события не запускаются в моем отдельном файле *. vue. В src / views / ads / AdsListing. vue я определяю:
<template>
<b-card class="frontend_listing_container">
...
<ads-modal></ads-modal>
</b-card>
</template>
<script>
import Vue from 'vue'
import VueResource from 'vue-resource'
Vue.use(VueResource)
import {bus} from '@/main'
import appMixin from '@/appMixin';
...
Vue.component('ads-modal', require('../ads/AdsModal.vue').default);
export default {
data() {
...
methods: {
runEditAdModal(ed_id) {
console.log('runEditAdModal ed_id::')
console.log(ed_id) // IN THE CONSOLE I SEE THIS method is called
console.log('+++ runEditAdModalbus::')
console.log(bus) // AND VALID BUS OBJECT
bus.$emit('showEditAdModal', ed_id)
}
В src / views / ads / AdsModal. vue Я пытаюсь отловить событие в событиях компонента:
<script>
import Vue from 'vue'
import VueResource from 'vue-resource'
...
import {bus} from '@/main'
import appMixin from '@/appMixin';
...
export default {
data() {
return {
...
}
},
name: 'adsModal',
created() {
alert( 'src/views/ads/AdsModal.vue CREATED::' ) // I DO NOT SEE THIS ALERT POPUP
}, // created() {
mounted() {
alert( 'src/views/ads/AdsModal.vue MOUNTED::' ) // I DO NOT SEE THIS ALERT POPUP
bus.$on('showEditAdModal', (ed_id) => {
console.log('showEditAdModalged ed_id::')
console.log(ed_id)
...
}) // bus.$on('page_changed', (from, to) => {
}, // mounted() {
Поскольку события не инициируются, событие showEditAdModal не создается. Что не так и как это исправить?
"bootstrap-vue": "^2.1.0",
"font-awesome": "^4.7.0",
"moment": "^2.24.0",
"moment-timezone": "^0.5.27",
"vue": "^2.6.10",
"vue-date-pick": "^1.2.1",
ОБНОВЛЕНО №1: а) с помощью
Vue.component('ads-modal', require('../ads/AdsModal.vue'));
Я получил предупреждение:
vue.runtime.esm.js?2b0e:619 [Vue warn]: Failed to mount component: template or render function not defined.
found in
---> <AdsModal>
<AdsListingPage>
<HomePage> at src/views/Home.vue
<AppContainer> at src/App.vue
<Root>
Но созданные / подключенные события не инициируются;
b) со строкой
Vue.component('ads-modal', () => import('../ads/AdsModal.vue'))
нет предупреждений, а созданные / подключенные события не инициируются.
c) Я пытался переместить импорт в src / main. js (комментируя это в моем src / views / ads / AdsListing. vue) и то же самое: созданные / смонтированные события не запускаются, и я не знаю, как вызвать методы в AdsModal. vue.