Я делаю первые шаги с Quasar.
Я хочу создать модальное окно для повторного использования в формах.
Я использую плагин Dialog и q-layout в пользовательском компоненте.
Однако, когда я использую этот пользовательский компонент в другом компоненте, методы плагина диалога не работают.
Есть ли способ решить эту проблему?
util / modal.js
import { Dialog } from "quasar";
export function ModalWindow(CustomComponent) {
Dialog.create({
component:CustomComponent,
ok: {
push: true
},
cancel: {
color: 'negative'
},
persistent: true
})
}
modal / ModalWindow.vue (пользовательский компонент):
<template>
<q-dialog persistent ref="dialog" @hide="onDialogHide">
<q-layout view="lhh LpR lff" container style="height: 400px" class="bg-grey-3">
<q-toolbar class="bg-primary text-white q-mb-sm">
<q-toolbar-title>
<slot name="titelWindow"></slot>
</q-toolbar-title>
<q-btn v-close-popup flat round dense icon="close" />
</q-toolbar>
<q-form @submit.prevent="submitForm">
<q-card-section>
<slot></slot>
</q-card-section>
<q-card-actions align="right">
<slot name="toolbarBottom"></slot>
</q-card-actions>
</q-form>
</q-layout>
</q-dialog>
</template>
<script>
export default {
methods: {
show () {
this.$refs.dialog.show()
},
hide () {
this.$refs.dialog.hide()
},
onDialogHide () {
this.$emit('hide')
}
}
}
</script>
Вызвать метод ModalWindow на странице:
<script>
import { ModalWindow } from 'src/util/modal'
import CustomComponent from "components/modal/MyModalWindow.vue"
export default {
methods: {
showUWin: function(id) {
ModalWindow(CustomComponent)
}
}
}
</script>
Пока работает хорошо.
Однако, как я уже сказал, когда я использую этот пользовательский компонент в другом компоненте, методы плагина диалога не работают.
отображать пользовательский компонент в другом компоненте: MyModalForm.vue
<template>
<MyModalWindow>
<!--Dialog's show method doesn't work-->
</MyModalWindow>
</template>
<script>
export default {
name: 'MyModalForm',
components: {
'MyModalWindow': require('components/modal/MyModalWindow.vue').default,
}
}
</script>
Вызвать метод ModalWindow на странице:
<script>
import { ModalWindow } from 'src/util/modal'
import CustomComponent from "components/modal/MyModalForm.vue"
export default {
methods: {
showWin: function(id) {
ModalWindow(CustomComponent)
}
}
}
</script>
Я захожу на консоль:
[Vue warn]: Error in mounted hook: "TypeError: this.$refs.dialog.show
is not a function"