【问题标题】:Format Date in VueJS. Back-end to front-end在 VueJS 中格式化日期。后端到前端
【发布时间】:2018-05-16 09:04:42
【问题描述】:

所以,我需要将来自后端的日期格式化到前端。 我有一张桌子:

    <vue-good-table
    :columns="columns"
    :rows="formatedItems"
    :paginate="true"
    :lineNumbers="true">

<script>
    export default {
        components: {
          Datepicker
        },
            data(){
                return {
            DatePickerFormat: 'dd/MM/yyyy',
                    items: [],
            columns: [
                        {
                            label: 'Number',
                            field: 'number',
                            type: 'String',
                            filterable: true,
                            placeholder: 'Number'
                        },
                        {
                            label: 'Identification number',
                            field: 'identNumber',
                            type: 'String',
                            filterable: true,
                            placeholder: 'Identification number'
                        },
                        {
                            label: 'Name',
                            field: 'name',
                            type: 'String',
                            filterable: true,
                            placeholder: 'Name'
                        },
                        {
                            label: 'Code',
                            field: 'code',
                            type: 'String',
                            filterable: true,
                            placeholder: 'Code'
                        },
                        {
                            label: 'From',
                            field: 'dateFrom',
                            type: 'String',
                            filterable: true,
                            placeholder: 'dd/mm/yyyy'
                        },
                        {
                            label: 'To',
                            field: 'dateTo',
                            type: 'String',
                            filterable: true,
                            placeholder: 'dd/mm/yyyy'
                        },
                        {
                            label: 'Last change',
                            field: 'dateChanged',
                            type: 'String',
                            filterable: true,
                            placeholder: 'dd/mm/yyyy'
                        },
                        {},
                        {}
                    ],
                    fields : {
                        "Number": "number",
                        "Identification numer": "identNumber",
                        "Name": "name",
                        "Code": "code",
                        "From": "dateFrom",
                        "To": "dateTo",
                        "Last Change": "dateChanged"
                    },
                    json_meta: [
                        [{
                        "key": "charset",
                        "value": "utf-8"
                        }]
                    ]
                }
            },
    computed: {
      formatedItems () {
        if (!this.items || this.items.length === 0) return []
        return this.rows.map(item => {
          return {
            ...items,
            dateFrom: moment(item.dateFrom).format('DD/MM/YYYY'),
            dateTo: moment(item.dateTo).format('DD/MM/YYYY'),
            dateChanged: moment(item.dateChanged).format('DD/MM/YYYY')
          }
        })
      }
    }
</script>

这是正确的代码段吗?因为某种原因我无法让它工作?

点击“搜索”按钮后,数据来自后端并在表格中可视化。但是,现在的日期格式是 1554163200000。如何制作并格式化为 dd/mm/yyyy?

错误:

TypeError: Cannot read property 'map' of undefined
    at s.formattedItems (eoriTable.vue:231)
    at xt.get (vue.esm.js:3142)
    at xt.evaluate (vue.esm.js:3249)
    at s.formattedItems (vue.esm.js:3507)
    at s.render (eoriTable.vue?d724:1)
    at s.A._render (vue.esm.js:4544)
    at s.<anonymous> (vue.esm.js:2788)
    at xt.get (vue.esm.js:3142)
    at xt.run (vue.esm.js:3219)
    at Lt (vue.esm.js:2981)
JA @ vue.esm.js:1741

这是我构建它时的错误。当我将 :rows: formattedItems 更改为项目(这是默认值)时,它呈现的一切都很好,但日期未格式化。

【问题讨论】:

  • 使用 moment.js..
  • 是的,但从技术上讲,我该怎么做呢?

标签: date vue.js format


【解决方案1】:

您可以使用moment.js 和计算属性

import moment from 'moment'

....
computed: {
  formatedItems () {
    if (!this.items || this.items.length === 0) return []
    return this.items.map(item => {
      return {
        ...item,
        dateFrom: moment(item.dateFrom).format('DD/MM/YYYY'),
        dateTo: moment(item.dateTo).format('DD/MM/YYYY'),
        dateChanged: moment(item.dateChanged).format('DD/MM/YYYY')
      }
    })
  }
}

在你的组件中

<vue-good-table
:columns="columns"
:rows="formatedItems"
:paginate="true"
:lineNumbers="true">

另一个选项是使用 vue-good-table 的 table-row slot

【讨论】:

  • 我不太了解这里的语法。 '计算',应该在方法中吗?我应该更改“...项目”吗?
  • 我在列中还有 4 个属性:[] 分别是标识号、编号、名称和代码,如果这进行了更改?
  • 计算的属性如果不同并且在方法之外vuejs.org/v2/guide/computed.html
  • ...items 是用于复制对象的 ES6 语法。它将复制对象的所有属性,您无需手动进行。类似于 return Object.assign(items, { dateFrom: moment(item.dateFrom).format('DD/MM/YYYY'), dateTo: moment(item.dateTo).format('DD/MM/YYYY'), dateChanged: moment(item.dateChanged).format('DD/MM/YYYY') }) developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • 不,当我点击搜索按钮时,它根本不会呈现绝对无信息。也许属性项不应该更改为 formattedItems?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-25
  • 2016-07-29
  • 1970-01-01
  • 2015-09-29
  • 2022-06-10
  • 2020-10-14
相关资源
最近更新 更多