@lolrofl01

Как работать с moment.js внутри vue.js?

Привет!
Делаю очень простенький скрипт с датами, хотел сделать поскорее, не используя вебпак, просто добавил vue (т.к. нужна реактивность) и добавил moment. Момент работает без vue отлично. Но внутри самого vue пишет, что функция undefined. Ладно, понимаю, что vue в своей локальной области ищет, и нашел такое решение. В methods добавить:
moment: function () {
            return moment();
        }

И все равно пишет, что функция undefined.

Вот код:
var moment = moment();

var app = new Vue({
    el: '#wrapper',
    data: { },
    methods: {
        makeCalculate: function () {
             var today = moment.format('DD.MM.YYYY');  //отлично работает
       },
       moment: function () {
            return moment();
        }
}
});


Так вот, понадобилось передать аргумент функции moment(). В коде, где комментарий "отлично работает" moment() работает через переменную, соответственно аргумент никак не передать((. А вот moment() или this.moment() (с отсылкой на метод vue) - возвращают "TypeError: moment is not a function". Как быть?
  • Вопрос задан
  • 9744 просмотра
Решения вопроса 1
var moment = moment();
Проблема в этом. В момент когда вы пишете var moment - глобальная переменная в этом контексте забывается и появляется локальная. Соответсвенно, когда вы делаете = moment() - он обращается не к глобальной переменной, которую создала библиотека, а к локальной, которую вы создали только что

Просто уберите эту строку и всё должно работать:
var moment = moment();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Lumore
@Lumore
Front-end developer
main.js
import Vue from 'vue';
import moment from 'moment';
Vue.prototype.$moment = moment;

const app = new Vue({
    el: '#wrapper'
});


component:
methods: {
        makeCalculate () {
             return this.$moment().format('DD.MM.YYYY');
       }
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы