【问题标题】:Methods of formatting a Vuex object value格式化 Vuex 对象值的方法
【发布时间】:2017-04-03 23:06:08
【问题描述】:

我试图了解如何在 Vuex 存储中使用值并进行一些格式化,关键是我试图找出 Vue 格式化存储中对象中包含的时间戳并在迭代对象时的方式.

例如使用以下商店

 const state = {
   events: {
     0: {
       id: 0,
       name: 'Example Event',
       start: 14907747374,
       end: 14907747674,
       entries: [0, 1]
     },
     1: {
       id: 1,
       name: 'Example Event 2',
       start: 14907740364,
       end: 14907740864,
       entries: [1]
     }
   },
   entries: {
     0: {
       id: 0,
       name: 'John Doe',
     },
     1: {
       id: 1,
       name: 'Paul Smith'
     }
   }
 }

然后我有一个 getter 来返回所有事件

export const events = state => state.events

然后我想在组件中将事件显示为列表/表格等

<template>
  <div class="events">
    <template v-for="event in getAllEvents">
       <div class="event>
         {{ event.name }} || {{ event.start }}
       </div>
    </template>
  </div>
</template>

<script>
  export default {
    name: 'events',
    computed: {
      getAllEvents: function () {
        return this.$store.state.events
      }
    }
  }
</script>

所以这会显示

Example Event || 14907747374
Example Event 2 || 14907740864

而我需要展示

Example Event || Jan 3rd 2017 14:15
Example Event 2 || Jan 3rd 2017 14:45

所以在 v-for 中,我想将 'event.start' 时间戳格式化为人类可读的日期,而我不确定 Vue 采用哪种方法。

过滤器

我以前用 Angular 1 过滤器做过类似的事情,但是我对 Vue 过滤器的理解是它们特定于组件,而它们在 Angular 1 中随处可用。格式化日期似乎是我应该能够编写的一项常见任务一个单一的功能,并在任何需要的地方使用它。 我可以在另一个模块中编写函数并将其导入到组件中,但我仍然需要在我希望使用它的每个组件中编写过滤器,但至少逻辑是分开的。

组件方法函数

与这里的过滤器相同的问题,逻辑可以是单独的功能,但我仍然有过滤器本身的重复

独立组件

可能是我想到的最好的解决方案,但感觉就像是滥用组件来实现这样的次要功能

<template>
  <span>{{ formattedDate }}</span>
</template>

<script>
  import 'moment'
  export default {
    name: 'humanDate',
    props: ['timestamp'],
    computed: {
      formattedDate: function () {
        return moment(timestamp).format()
      }
    }
  }
</script>

然后像这样使用组件

<human-date timestamp="event.start"></human-date>

有没有更好的方法我错过了,并且正在为小事情创建组件,例如合理使用组件?

【问题讨论】:

标签: vue.js vuex


【解决方案1】:

查看Mixins。我创建了一个使用moment.js 格式化日期的快速混入:

import moment from 'moment'

export default {
    formatDateMixin: {
        methods: {
            formatDate: function(value) {
                if( !value) return '';

                return moment(value).format('YYYY-MM-DD HH:mm:ss');
            }
        }
    }
}

将其插入主 Vue 实例:

Vue.mixin(formatDateMixin);

现在你可以在任何模板中使用它了:

{{ event.name }} || {{ formatDate(event.start) }}

【讨论】:

  • 太棒了,这种方法实际上感觉像是正确的方法,而不是像我的方法那样的变通方法。谢谢。
  • 这个其实是mixin里面的一个方法
猜你喜欢
  • 1970-01-01
  • 2022-01-10
  • 2023-03-21
  • 1970-01-01
  • 2012-07-09
  • 2015-07-06
  • 2012-02-12
  • 1970-01-01
  • 2018-06-26
相关资源
最近更新 更多