【问题标题】:FullCalendar 4.0 within a Vue applicationVue 应用程序中的 FullCalendar 4.0
【发布时间】:2019-03-28 06:20:27
【问题描述】:

我正在使用没有 jquery 的 fullCalendar v4.0。我已经这样初始化了

<div id="calendar"></div>

在数据对象中我有这个。

    calendar: null,
    config: {
      plugins: [ interactionPlugin, dayGridPlugin, timeGridPlugin, listPlugin, momentPlugin],
      axisFormat: 'HH',
      defaultView: 'timeGridWeek',
      allDaySlot: false,
      slotDuration: '00:60:00',
      columnFormat: 'dddd',
      titleFormat: 'dddd, MMMM D, YYYY',
      defaultDate: '1970-01-01',
      dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
      eventLimit: true,
      eventOverlap: false,
      eventColor: '#458CC7',
      firstDay: 1,
      height: 'auto',
      selectHelper: true,
      selectable: true,
      timezone: 'local',
      header: {
        left: '',
        center: '',
        right: '',
      },
      select: (event) => {
        this.selectCalendar(event)
      },
      header: false,
      events: null
    }
  }

虽然在数据变量中有一个日历,但现在我可以从任何地方render()destroy() 它。 但我在处理日历事件时遇到问题:

  select: (event) => {
    this.selectCalendar(event)
  }

我在methods: {} 中定义了另一个方法selectCalendar() 在选择中调用它,但我收到一个错误

Uncaught TypeError: Cannot read property 'selectCalendar' of undefined

我想对selecteventClickeventDropeventResize 做一些操作,但我无法在配置中调用方法。

还有什么方法可以将 select 或任何方法定义为

select: this.selectCalendar

所以它会直接向定义的方法发送事件?

我已经尝试过 vue-fullcalendar,但它对我的事业不起作用。任何帮助将不胜感激。

Vue v.2.5.21

【问题讨论】:

    标签: vue.js vuejs2 fullcalendar fullcalendar-4


    【解决方案1】:

    我使用的是vue全日历,你可以像下面的代码一样处理全日历的事件

      <full-calendar :event-sources="eventSources" @event-selected="myEventSelected"></full-calendar>
    
    
    export default{
        methods:{
        caculateSomething(event){
            //do st here
        },
        myEventSelected(event){
            //do st here
          this.caculateSomething(event)
          console.log(event)
        }
      }
    }
    

    【讨论】:

    • 谢谢,但这不是我问的问题:)
    【解决方案2】:

    我就是这样整理出来的。

    1. 在html中&lt;div id="calendar"&gt;&lt;/div&gt;
    2. 在你的data() =&gt; {}

      calendar: null,
      config: {
        plugins: [ interactionPlugin, dayGridPlugin, timeGridPlugin, listPlugin, momentPlugin],
        axisFormat: 'HH',
        defaultView: 'timeGridWeek',
        allDaySlot: false,
        slotDuration: '00:60:00',
        columnFormat: 'dddd',
        columnHeaderFormat: { weekday: 'short' },
        defaultDate: '1970-01-01',
        dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
        eventLimit: true,
        eventOverlap: false,
        eventColor: '#458CC7',
        firstDay: 1,
        height: 'auto',
        selectHelper: true,
        selectable: true,
        timezone: 'UTC',
        header: {
          left: '',
          center: '',
          right: '',
        },
        header: false,
        editable: true,
        events: null
      }
      

    第一次不要在配置中定义任何selectresizedropEvent,但是你要渲染日历的部分做这样的事情

        if (this.calendar == null) {
          console.log(this.schedule)
          let calendarEl = document.getElementById('calendar');
    
          let calendarConfig = this.config
    
          let select = (event) => {
            this.selectCalendar(event)
          }
    
          let eventClick = (event) => {
            this.clickCalendar(event)
          }
    
          let eventDrop = (event) => {
            this.dropCalendar(event)
          }
    
          let eventResize = (event) => {
            this.resizeCalendar(event)
          }
    
          calendarConfig.select = select;
          calendarConfig.eventClick = eventClick;
          calendarConfig.eventDrop = eventDrop;
          calendarConfig.eventResize = eventResize;
    
          this.calendar = new Calendar(calendarEl, calendarConfig);
          this.calendar.render();
    
          this.renderEvents()
        }
    

    现在您可以用自己的方法处理 FullCalendar 的这些事件。

    还拥有this.calendar 中的日历,让您可以在methods: {} 中的任何地方销毁它

    在 FullCalendar 4.0 中发生了一些变化,但非常简单。

    这些是附加到 FullCalendar 事件的方法

      selectCalendar(event) {
        this.calendar.addEvent(event)
      },
    
      clickCalendar(event) {
        if (window.confirm("Are you sure you want to delete this event?")) {
          let findingID = null
          if (event.event.id === "") {
            findingID = event.el
          } else {
            findingID = event.event.id
          }
          let removeEvent = this.calendar.getEventById( findingID )
          removeEvent.remove()
        }
      },
    
      dropCalendar(event) {
    
      },
    
      resizeCalendar(event) {
    
      },
    
      destroyCalendar() {
        if (this.calendar != null) {
          this.calendar.destroy();
          this.calendar = null
        }
      }
    

    当您添加事件时。您可以在事件中通过el 找到它,但自定义事件应具有唯一ID。您将通过它找到并删除它。

    【讨论】:

      猜你喜欢
      • 2017-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 2021-01-02
      • 1970-01-01
      • 2012-11-20
      相关资源
      最近更新 更多