#javascript #vue.js #momentjs #vue-cli
#javascript #vue.js #momentjs #vue-cli
Вопрос:
У меня установлен 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?
Ответ №1:
Установите 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>
Комментарии:
1. Спасибо! Наиболее полное руководство для новичка вроде меня. Я меняю часть импорта на
import moment from 'moment'
. Я не совсем понимаю, почему существует так много вариантов / способов.
Ответ №2:
Я узнал, где я был неправ. Я не импортировал момент в тег сценария компонента. Я должен был это сделать
<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>
и теперь он работает нормально.
Ответ №3:
Vue-moment — это просто набор полезных фильтров Vue для повседневных функций Moment.
«Ошибка», которую вы здесь делаете, заключается в том, что, по крайней мере, для Vue 2.0, фильтры работают только в тегах mustache и v-bind, а не в v-html.
Чтобы выполнить то, чего вы пытаетесь достичь здесь, вы хотели бы разделить сценарии и разметку. Вы можете сделать это двумя способами, как я показываю в вашем измененном коде ниже:
- Разделите строку, чтобы вы могли выполнить JavaScript, а затем преобразовать ее обратно в строку:
"<p>" 5*5 "</p>"
- Вы также можете, как вы пытались, использовать функцию для выполнения задания (как вы это делали в
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/vue-moment@4.0.0/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>
Комментарии:
1. Ошибка, которую я получаю, такая же, как и ранее. В vscode показано, что момент не определен
2. Вы ничего не сказали о том, что moment не определен в VSCode. Однако это должно сработать, проблема только в том, что vscode не понимает, что в конце два файла соединяются вместе
3. Я нашел решение. Мне пришлось импортировать его туда, где я вызвал функцию moment() .