Как использовать Moment.js в vuecli

У меня установлен npm vue-moment. Мне нужно передать дату тегу p через цикл for. Также Мне нужно создать метод, где я могу добавить количество дней к моей дате, чтобы она обувала дату после этого количества дней. Как мне это сделать ИЛИ где я не прав

код main.js:

Vue.use(require("vue-moment"));

код vuecomponent:

<template>
  <div>
    <div>
      <span>{{ new Date() | moment("MM.DD.YY") }}</span>
    </div>
    <p v-for = "data in printdata" :key = "data.index" v-html = "data.name"></p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      printdata: [
        {
          name: "paraone"
        },
        {
          name: "<span>{{ new Date() | moment('MM.DD.YY') }}</span>"
        },
        {
          name: "parathree"
        },
        {
          name: "parafour"
        }
      ]
    };
  },
  components: {},

  methods: {
    changeDate: function() {
      var todaydate = new Date();
      moment(todaydate).format("YYYY-MM-DD");
      this.printdata[0].name = todaydate;
    }
  },
  created() {
    this.changeDate();
  }
};
</script>

<style lang = "scss" scoped></style>

Тот, что в теге div, работает, как и ожидалось, но как мне получить дату во втором теге p?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
0
7 152
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Vue-moment — это просто набор полезных Vue фильтры для повседневных функций Moment.

"ошибка", который вы здесь делаете, это, по крайней мере, для Vue 2.0, фильтры работают только в тегах усов и v-bind, а не v-html.

Чтобы выполнить то, что вы пытаетесь достичь здесь, вам нужно разделить сценарии и разметку. Вы можете сделать это двумя способами, как показано в вашем модифицированном коде ниже:

  1. Разделите строку, чтобы вы могли выполнить JavaScript, а затем преобразовать ее обратно в строку: "<p>"+ 5*5 +"</p>"
  2. Вы также можете, как вы пытались, использовать функцию для выполнения задания (как вы делали в changeDate)

    • Я немного изменил вашу функцию. Момент по умолчанию равен сегодняшней дате, поэтому не нужно получать new Date()

Vue.use(vueMoment.install);

new Vue({
  el: '#app',
  data() {
    return {
      printdata: [
        {
          name: "paraone"
        },
        {
          name: "<span>" + moment().format('MM.DD.YY') + "</span>"
        },
        {
          name: "parathree"
        },
        {
          name: "parafour"
        }
      ]
    };
  },
  components: {},

  methods: {
    changeDate: function() {
      const todayDate = moment().format("YYYY-MM-DD");
      this.printdata[0].name = todayDate;
    }
  },
  created() {
    this.changeDate();
  }
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src = "https://cdn.jsdelivr.net/npm/[email protected]/dist/vue-moment.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id = "app">
  <div>
    <div>
      <span>{{ new Date() | moment("MM.DD.YY") }}</span>
    </div>
    <p v-for = "data in printdata" :key = "data.index" v-html = "data.name"></p>
  </div>
</div>

Ошибка, которую я получаю, такая же, как и раньше. В vscode видно, что момент не определен

Ram 22.04.2019 02:45

Вы ничего не сказали о том, что момент не определен в VScode. Тем не менее, это должно работать, проблема только в том, что vscode не понимает, что два файла в конце концов объединены.

Sølve Tornøe 22.04.2019 16:33

Я понял решение. Мне пришлось импортировать его там, где я вызвал функцию moment().

Ram 22.04.2019 18:33
Ответ принят как подходящий

Я понял, где я был неправ. Я не импортировал момент в тег скрипта компонента. я должен был сделать это

<script>
import * as moment from "moment/moment";
export default {
  data() {
    return {
      printdata: [
        {
          name: "paraone"
        },
        {
          name: "<span>{{ new Date() | moment('MM.DD.YY') }}</span>"
        },
        {
          name: "parathree"
        },
        {
          name: "parafour"
        }
      ]
    };
  },
  methods: {
    changeDate: function() {
      var todaydate = new Date();
      moment(todaydate).format("YYYY-MM-DD");
      this.printdata[0].name = todaydate;
    }
  },
  created() {
    this.changeDate();
  }
};
</script>

и теперь он работает нормально.

Установите библиотеку moment:

cd my-vue-cli-project
npm install moment

Загрузите его в свой файл main.js:

Vue.use(require("moment"));

Проверьте это в своем файле components/HelloWorld.vue:

<template>
  <div>
    {{ today }}
  </div>
</template>

<script>
import * as moment from "moment/moment";
export default {
data: function () {
    return {
      today: moment()
    }
  }
}
</script>

Спасибо! Самый полный гайд для новичков вроде меня. Я меняю часть импорта на import moment from 'moment'. Я не совсем понимаю, почему так много вариаций/способов.

Coisox 07.01.2020 17:06

Другие вопросы по теме