Eu tento imprimir a data e hora usando o seguinte em vue-for
{{ moment().format('MMMM Do YYYY, h:mm:ss a') }}
mas, não aparece. É apenas um espaço em branco. Como posso tentar usar o momento no vue?
Eu tento imprimir a data e hora usando o seguinte em vue-for
{{ moment().format('MMMM Do YYYY, h:mm:ss a') }}
mas, não aparece. É apenas um espaço em branco. Como posso tentar usar o momento no vue?
Respostas:
Com seu código, o vue.js
está tentando acessar o moment()
método a partir do seu escopo.
Portanto, você deve usar um método como este:
methods: {
moment: function () {
return moment();
}
},
Se você deseja passar uma data para moment.js
, sugiro usar filtros:
filters: {
moment: function (date) {
return moment(date).format('MMMM Do YYYY, h:mm:ss a');
}
}
<span>{{ date | moment }}</span>
Se o seu projeto for um aplicativo de página única (por exemplo, projeto criado por vue init webpack myproject
), achei desta maneira mais intuitiva e simples:
No main.js
import moment from 'moment'
Vue.prototype.moment = moment
Em seguida, no seu modelo, basta usar
<span>{{moment(date).format('YYYY-MM-DD')}}</span>
No seu package.json
na "dependencies"
seção adicione momento:
"dependencies": {
"moment": "^2.15.2",
...
}
No componente em que você gostaria de usar o momento, importe-o:
<script>
import moment from 'moment'
...
E no mesmo componente, adicione uma propriedade computada:
computed: {
timestamp: function () {
return moment(this.<model>.attributes['created-at']).format('YYYY-MM-DD [at] hh:mm')
}
}
E então no modelo deste componente:
<p>{{ timestamp }}</p>
date2day: function (date) {return moment(date).format('dddd')}
Você não pode usar computed
e deve usá-lo methods
.
Eu fiz funcionar com o Vue 2.0 no componente de arquivo único.
npm install moment
na pasta onde você instalou o vue
<template>
<div v-for="meta in order.meta">
{{ getHumanDate(meta.value.date) }}
</div>
</template>
<script>
import moment from 'moment';
export default {
methods: {
getHumanDate : function (date) {
return moment(date, 'YYYY-MM-DD').format('DD/MM/YYYY');
}
}
}
</script>
Aqui está um exemplo usando uma biblioteca de wrapper de terceiros para o Vue chamada vue-moment
.
Além de vincular a instância do Moment ao escopo raiz do Vue, esta biblioteca inclui moment
e duration
filtra.
Este exemplo inclui localização e está usando importações do módulo ES6, um padrão oficial, em vez do sistema do módulo CommonJS do NodeJS.
import Vue from 'vue';
import moment from 'moment';
import VueMoment from 'vue-moment';
// Load Locales ('en' comes loaded by default)
require('moment/locale/es');
// Choose Locale
moment.locale('es');
Vue.use(VueMoment, { moment });
Agora você pode usar a instância Moment diretamente nos seus modelos do Vue sem nenhuma marcação adicional:
<small>Copyright {{ $moment().year() }}</small>
Ou os filtros:
<span>{{ 3600000 | duration('humanize') }}</span>
<!-- "an hour" -->
<span>{{ [2, 'years'] | duration('add', 1, 'year') | duration('humanize') }}</span>
<!-- "3 years" -->
// plugins/moment.js
import moment from 'moment';
moment.locale('ru');
export default function install (Vue) {
Object.defineProperties(Vue.prototype, {
$moment: {
get () {
return moment;
}
}
})
}
// main.js
import moment from './plugins/moment.js';
Vue.use(moment);
// use this.$moment in your components
Eu simplesmente importaria o módulo moment, então usaria uma função computada para manipular minha lógica moment () e retornar um valor referenciado no modelo.
Embora eu não tenha usado isso e, portanto, não possa falar sobre sua eficácia, encontrei https://github.com/brockpetrie/vue-moment para uma consideração alternativa
momento-momento
plugin muito bom para o projeto vue e funciona muito bem com os componentes e o código existente. Aproveite os momentos ... 😍
// in your main.js
Vue.use(require('vue-moment'));
// and use in component
{{'2019-10-03 14:02:22' | moment("calendar")}}
// or like this
{{created_at | moment("calendar")}}