3

我的最终目标是将 Bootstrap 4 弹出框添加到完整日历以显示日历事件描述,因为根据视图,完整日历会切断标题/描述。由于完整日历是根据我传递给它的事件道具生成所有内容,因此我无法弄清楚如何添加任何类型的弹出框。(我可能可以用 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 之后,因为它没有添加 Popover。

有没有其他方法可以使用info传递给eventRender函数的对象的参数来添加Popover?(eventRender 函数文档:https ://fullcalendar.io/docs/eventRender )

4

2 回答 2

2

您可以通过 bootstrap-vue 中的 propsData 获取 BPopover,如下所示:

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://vuejs.org/v2/api/index.html#propsData

于 2019-09-11T01:43:15.983 回答
1

好的,在花了一些时间阅读 Boostrap-Vue 代码并玩了一下之后,我能够让它工作了!

这是使用 PopOver 工作的组件的精简版本:

<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>

于 2019-04-25T14:41:38.670 回答