Javascript 从MySQL获取并显示Vue.js Fullcalendar上的事件
我想从MySQL数据库中检索我的事件,并将其发送到我的Vue组件,以便相应地在FullCalendar组件上显示事件。尽管它作为一个完整的HTML文档填充我的事件数组 这是我的事件控制器Javascript 从MySQL获取并显示Vue.js Fullcalendar上的事件,javascript,mysql,laravel,vue.js,vue-component,Javascript,Mysql,Laravel,Vue.js,Vue Component,我想从MySQL数据库中检索我的事件,并将其发送到我的Vue组件,以便相应地在FullCalendar组件上显示事件。尽管它作为一个完整的HTML文档填充我的事件数组 这是我的事件控制器 public function getEvents() { $getEvents = Event::query()->select('projectid','event_id','start_time','end_time','notes','taskid')->get(); $ev
public function getEvents()
{
$getEvents = Event::query()->select('projectid','event_id','start_time','end_time','notes','taskid')->get();
$events = [];
foreach ($getEvents as $values) {
$event = [];
$event['eventid'] = $values->event_id;
$event['projectid'] = $values->projectid;
$event['start_time'] = $values->start_time;
$event['end_time'] = $values->end_time;
$event['notes'] = $values->notes;
$event['taskid'] = $values->taskid;
$events[] = $event;
}
return json_encode($events);
//return $event->project()->get()->pluck('eventid')->toArray();
}
My FullCalendar.vue组件
<template>
<FullCalendar
ref="fullCalendar"
:options="calendarOptions"
color="primary"
:events="getEvents"
:type="type"
v-model="query"
></FullCalendar>
</template>
<script>
import FullCalendar from '@fullcalendar/vue'
import timeGridPlugin from '@fullcalendar/timegrid'
import interactionPlugin from '@fullcalendar/interaction'
import axios from 'axios'
export default {
components: {
FullCalendar // make the <FullCalendar> tag available
},
props: {},
data() {
return {
events: [],
calendarOptions: {
plugins: [timeGridPlugin, interactionPlugin],
initialView: 'timeGridWeek',
weekends: false,
eventClick: this.handleEventClick,
},
}
},
computed: {},
methods: {
handleEventClick: function (arg) {
alert('Event: ' + arg.events);
},
getEvents: function () {
this.$http.get('/events', {data: {query: this.query}}).then((response) => {
this.events = response.data;
console.log(this.events);
}, (error) => {
})
}
},
mounted() {
this.getEvents();
},
}
</script>
<style scoped>
</style>
My blade.php
<v-card>
<v-layout row wrap>
<v-flex>
<v-btn color="primary" dark @click="newEventDialog = true">
New Event
</v-btn>
<full-calendar></full-calendar>
</v-flex>
</v-layout>
</v-card>
新事件
这是我的事件数组中填充的内容:
"<!DOCTYPE html>\r\n<html lang=\"en\">\r\n<head>\r\n <meta charset=\"utf-8\">\r\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n .........
“\r\n\r\n\r\n\r\n\r\n。。。。。。。。。
问题在于路由('/event')
。已经存在具有该名称的路由
下面是获取事件并将其显示在日历上的代码
路线:
Route::get('/event', 'EventController@getEvents');
事件控制器:
public function getEvents()
{
$getEvents = Event::query()->select('projectid',
'eventid',
'start_time',
'end_time',
'notes',
'taskid')
->get();
$events = [];
foreach ($getEvents as $values) {
$event = [];
$startTime = Carbon::parse($values->start_time)->format("Y-m-d H:s");
$endTime = Carbon::parse($values->end_time)->format("Y-m-d H:s");
$startTime = Carbon::parse($startTime)->timezone("Africa/Windhoek");
$endTime = Carbon::parse($endTime)->timezone("Africa/Windhoek");
$values->start_time = $startTime;
$values->end_time = $endTime;
$event['id'] = $values->eventid;
$event['title'] = $values->notes;
$event['start'] = $values->start_time;
$event['end'] = $values->end_time;
$event['allDay'] = false;
$events[] = $event;
}
return response()->json($events);
}
FullCalendar.vue
<template>
<FullCalendar ref="fullCalendar" :options="calendarOptions" :events="event"/>
</template>
<script>
import FullCalendar from '@fullcalendar/vue'
import timeGridPlugin from '@fullcalendar/timegrid'
import interactionPlugin from '@fullcalendar/interaction'
import axios from 'axios'
export default {
components: {
FullCalendar
},
props: {},
data() {
return {
calendarOptions: {
plugins: [timeGridPlugin, interactionPlugin],
initialView: 'timeGridWeek',
weekends: false,
editable:true,
eventClick: this.handleEventClick,
dateClick:this.handleDateClick,
events: []
},
}
},
computed: {},
methods: {
handleEventClick: function (arg) {
alert('Event' + event.title)
},
handleDateClick: function (arg) {
},
getEvents: function () {
this.$http.get('/event').then((response) => {
console.log(response);
this.calendarOptions.events = response.data;
}, (error) => {
})
}
},
mounted() {
this.events = this.getEvents();
},
}
</script>
<style scoped>
</style>
从“@FullCalendar/vue”导入FullCalendar
从“@fullcalendar/timegrid”导入timeGridPlugin
从“@fullcalendar/interaction”导入interactionPlugin
从“axios”导入axios
导出默认值{
组成部分:{
日历
},
道具:{},
数据(){
返回{
日历选项:{
插件:[timeGridPlugin,interactionPlugin],
initialView:“timeGridWeek”,
周末:错,
是的,
事件单击:this.handleEventClick,
dateClick:this.handleDateClick,
事件:[]
},
}
},
计算:{},
方法:{
handleEventClick:函数(参数){
警报('Event'+Event.title)
},
HandleDate单击:函数(参数){
},
getEvents:函数(){
这是.http.get('/event')。然后((响应)=>{
控制台日志(响应);
this.calendarOptions.events=response.data;
},(错误)=>{
})
}
},
安装的(){
this.events=this.getEvents();
},
}
home.blade.php
<v-card>
<v-layout row wrap>
<v-flex>
<v-btn color="primary" dark @click="newEventDialog = true">
New Event
</v-btn>
<full-calendar></full-calendar>
</v-flex>
</v-layout>
</v-card>
<v-card>
<v-layout row wrap>
<v-flex>
<full-calendar></full-calendar>
</v-flex>
</v-layout>
</v-card>
看起来laravel从你的控制器返回的不仅仅是JSON。这就是问题所在吗?你需要使用来发送JSON,并且只发送JSON。我认为事件
字段应该是日历选项
的属性。这就是问题所在。是的,它发送整个html、脚本等,而不是我从t收到的JSON数据他发现我正确地检索了我的事件,尽管它没有将json数据放在我在数据()中声明的事件[]
中。如果我运行控制台.log(this.events)
,事件显示正确