【问题标题】:Vuejs bind object to object ifVuejs 将对象绑定到对象 if
【发布时间】:2017-08-30 17:40:40
【问题描述】:

我的日历在时刻的帮助下创建了 41 天。

    for (let x = 0; x < 42; x++) {
        context.add(1, 'd');
        let day = {
            'date': moment(context),
            'events': []
        };
    }
    state.month = days;

然后我渲染这些日子。

        <day
             v-for="(day, index) in days"
             v-bind:day="day"
             v-bind:index="index"
             v-bind:key="day.id">
            0
        </day>

我每月从数据库中收集日事件并将它们发送到 vue。

**Event**
id
name
date
is_accepted

public static function getEventsByMonth($month) {
    return Events::whereMonth('date', '=', $month);
}

现在主要问题是:有没有一种 vue 方法可以将事件正确绑定到 days ?还是我必须在每天比较日期时循环每个事件?

编辑:

从数据库中获取事件后我的 vuestore 中的事件:

events:Object
2017-04-02 00:00:00:Object
2017-04-14 00:00:00:Object

以下是这些日子:

days:Array[42]
0:Object
1:Object

【问题讨论】:

  • 问题1:你不能改变你的php代码?问题 2:events:Object 包含所有事件,但是当同一天有 2 个事件时会发生什么?
  • 我可以改变一切。不可能在同一天举办 2 场活动。

标签: javascript laravel vue.js


【解决方案1】:

当您从数据库中获取事件时,您可以在后端创建一个数组(根据您的需要进行更改):

$events = array();

foreach( $eventsFromDatabase as $event) {//$event is the event get from database
    if( !isset($event[$date]) ) {
        $events[$date] = array();
    }
    $events[$date][] = $events;
} 

return json_encode($events);

然后在 Vue 中:

<day
    v-for="(day, index) in days"
    v-bind:day="day"
    v-bind:index="index"
    v-bind:key="day.id">

   <!-- You must create the event component -->
   <event v-for="(event, index) in events[day]" :key="event"
          :id="event.id" :name="event.name" :date="event.date"
          :is-accepted="event['is_accepted']
          >

   </event>

</day>

更新:

逻辑是:对于每个day,如果事件存在,则将事件放在日组件中:

<day v-for...> HERE PUT EVENT COMPONENT </day>

day 组件模板的定义中,您应该使用&lt;slot&gt;&lt;/slot&gt; 接受来自父级的html:slots

因为您循环通过days 数组,您可以访问当天的值(不知道 moment.js 日期的键,例如 day.date),然后您可以访问正确的事件:

events[day.date] // change the .date to your needs (for moment.js)

所以你可以像这样访问事件名称:

<day v-for="(day, index) in days"...>
    <div v-if="events[day.date] !== 'undefined'">
        <event :name="events[day.date].name ...etc..></event>
    <di>
</day>

【讨论】:

  • 如果我错了请纠正我,但我认为这是假设一天知道它有一个事件。事实并非如此。
  • @Macdows 不,我不认为有一天会知道它有事件。您创建(在 PHP 中)一个以 day 作为键的事件数组。然后在 Vue 中,您使用 events[day] 执行第二个循环,但天不知道它有事件。这是事件数组,它知道带有日期键的事件。
  • @Macdows 请输入您从数据库中获取事件的 PHP 代码。在 PHP 中,Eventdate 是一个月或一个完整的日期(日、月和年)?
  • 我用 vue 商店中的日期和事件数据更新了 OP。
  • 您能不粘贴代码,而是告诉我目标是什么? day 组件会在什么时候渲染事件组件?谢谢
猜你喜欢
  • 1970-01-01
  • 2015-09-29
  • 2020-09-27
  • 2016-07-23
  • 2011-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
相关资源
最近更新 更多