Задать вопрос
@marsdenden

Почему экземпляр Vue созданный вне основного приложения не видит компоненты Vuetify?

Всем здравствуйте!
Не могу понять - почему возникают ошибки [Vue warn]: Unknown custom element: <v-dialog> - did you register the component correctly? For recursive components, make sure to provide the "name" option.

Пытаюсь сделать плагин с использованием vuetify, код плагина

import Vue from 'vue';
import vuetify from "vuetify";

const dialog = {
    name:'askdialog',
    vuetify,
    data:{
        askDialog:false,
        dialogTitle:'',
        dialogMessage: '',
        dialogType:'alert'
    },
    computed:{
        buttons(){
            switch (this.dialogType) {
                case 'confirm':
                    return [
                        {title:'OK', icon:'done', command: 'ok'},
                        {title:'Отмена', icon:'close', command: 'cancel'},
                    ]
                case 'ask':
                    return [
                        {title:'Да', icon:'done', command: 'ok'},
                        {title:'Нет', icon:'close', command: 'cancel'},
                    ]
                default:
                    return [
                        {title:'OK', icon:'done', command: 'ok'},
                    ]
            }
        }

    },
    template:'        <v-dialog width="500px" v-model="askDialog">\n' +
        '            <v-card>\n' +
        '                <v-card-title class="primary" dense primary-title>\n' +
        '                    {{dialogTitle}}\n' +
        '                </v-card-title>\n' +
        '                {{dialogMessage}}\n' +
        '                <v-toolbar dense>\n' +
        '                    <v-spacer></v-spacer>\n' +
        '                    <v-btn v-for="btn in buttons" @click="$emit(btn.command)">\n' +
        '                        <v-icon>{{btn.icon}}</v-icon>\n' +
        '                        {{btn.title}}\n' +
        '                    </v-btn>\n' +
        '                </v-toolbar>\n' +
        '            </v-card>\n' +
        '        </v-dialog>\n'
}

export default {
    install(Vue, el){
        this.el = el
        this.instance = null
        Vue.prototype.$dialog=this
    },
    _checkInstance(){
        if(this.instance===null){
            this.instance = new Vue(dialog)
            this.instance.$mount('#'+this.el)
        }
    },
    alert(title, message, callback){
        this._checkInstance()
        this.instance.$data.dialogTitle = title
        this.instance.$data.dialogMessage = message
        this.instance.$data.dialogType = 'alert'
        this.instance.$data.askDialog = true
    }
}


в main.js
import askdialog from "./plugins/askdialog";

    Vue.use(askdialog,'ask') // ask - id элемента div, куда будет монтироваться


Суть плагина:
добавляет в Vue.prototype $dialog, у которого будут методы alert, confirm и ask.
Суть методов - отобразить модальное окно с предопределенным для каждого метода набором кнопок.
Причина использования vuetify - в проекте он уже используется и мне понравились его модальные окна - на самом деле модальные, табом по элементам под окном не походишь
Использование - this.$dialog.alert('Заголовок','текст сообщения',callback). До реализации колбэка дело пока не дошло
Для корректного использование в корневом шаблоне есть div с id, этот id передается в плагин и в него, по задумке, должно производится монтирование экземпляра Vue, который создает плагин.

Все вроде хорошо, кроме одного - как только выполняется $mount - так сразу в консоль сыпятся сообщения об ошибках о неопознанных кастомных элементах. Вроде и в проекте vuetify используется и в плагине его подключаю - все равно идут ошибки.

Почему это происходит?
  • Вопрос задан
  • 240 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@art055
Для начала проверьте версию vuetify, версия 1,5 и 2 разные вещи.
Ответ написан
Ваш ответ на вопрос

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

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