#vuejs2 #fullcalendar #bootstrap-vue #bootstrap-popover #fullcalendar-4
#vuejs2 #полный календарь #bootstrap-vue #bootstrap-всплывающее окно #полный календарь-4
Вопрос:
Моя конечная цель — добавить всплывающее окно Bootstrap 4 в полный календарь для отображения описаний событий календаря, поскольку в зависимости от вида Полный календарь отключает заголовок / описание. Поскольку полный календарь генерирует все на основе реквизита events, который я ему передаю, я не смог понять, как добавить всплывающее окно любого рода. (Вероятно, я мог бы сделать это с помощью jQuery, но я действительно пытаюсь вырезать jQuery из проекта, чтобы уменьшить размер моей сборки)
Здесь есть отличная документация по нормальному использованию всплывающего окна с bootstrap vue: https://bootstrap-vue.js.org/docs/directives/popover /
К сожалению, полный календарь не предоставляет возможности использовать ни один из методов, описанных в документах Boostrap-Vue. Одна вещь, которую я пробовал, но не сработала, заключалась в следующем
<template>
<full-calendar
:events="events"
@eventRender="eventRender"
></full-calendar>
</template>
<script>
import FullCalendar from '@fullcalendar/vue'
export default{
data(){
events: [...],
},
methods: {
eventRender(info){
info.el.setAttribute('v-b-popover.hover.top', 'Popover!')
}
}
}
</script>
Это добавляет атрибут в HTML, но я предполагаю, что это после того, как Vue обработает DOM, потому что он не добавляет всплывающее окно.
Есть ли какой-либо другой способ использовать параметры info
объекта, переданного функции eventRender, для добавления всплывающего окна? (Документы по функции eventRender:https://fullcalendar.io/docs/eventRender )
Ответ №1:
Вы можете использовать BPopover с помощью propsData в bootstrap-vue следующим образом:
import { BPopover } from 'bootstrap-vue'
...
methods: {
...
onEventRender: function (args) {
//console.log(args)
let titleStr = 'xxxx'
let contentStr = 'xxxx'
new BPopover({propsData: {
title: titleStr,
content: contentStr,
placement: 'auto',
boundary: 'scrollParent',
boundaryPadding: 5,
delay: 500,
offset: 0,
triggers: 'hover',
html: true,
target: args.el,
}}).$mount()
}
}
несмотря на то, что propsData является значением для теста … https://v2.vuejs.org/v2/api/index.html#propsData
Ответ №2:
Хорошо, потратив некоторое время на чтение кода Boostrap-Vue и немного поиграв, я смог заставить его работать!
Вот сокращенная версия компонента с работающим всплывающим окном:
<template>
<full-calendar
:events="events"
@eventRender="eventRender"
></full-calendar>
</template>
<script>
import FullCalendar from '@fullcalendar/vue'
import PopOver from 'bootstrap-vue/src/utils/popover.class'
export default{
data(){
events: [...],
},
methods: {
eventRender(info){
// CONFIG FOR THE PopOver CLASS
const config = {
title: 'I am a title',
content: "This text will show up in the body of the PopOver",
placement: 'auto', // can use any of Popover's placements(top, bottom, right, left etc)
container: 'null', // can pass in the id of a container here, other wise just appends to body
boundary: 'scrollParent',
boundaryPadding: 5,
delay: 0,
offset: 0,
animation:true,
trigger: 'hover', // can be 'click', 'hover' or 'focus'
html: false, // if you want HTML in your content set to true.
}
const target = info.el;
const toolpop = new PopOver(target, config, this.$root);
console.log('TOOLPOP', toolpop);
},
}
}
</script>