Я использую Vue.js и Laravel для своего проекта и недавно добавил две анимации с помощью плагина Lottie. Каждая анимация является компонентом, и оба они используют отдельный файл JSON для анимации группы изображений PNG (аналогично последовательности PNG). Эти два файла JSON хранятся локально в папке проекта по пути /public/data/.
Во-первых, файлы JSON не читаются, если я не укажу абсолютный путь (/users/username/documents/projectname/public/data/filename.json), я никак не могу получить это работать, просто используя /data/filename.json?
Во-вторых, когда я добавляю приведенный ниже код в свой компонент, мои файлы JS компилируются в отдельные фрагменты, как и ожидалось:
const animationData = () =>
import("/users/username/documents/projectname/public/data/filename.json");
Я получаю следующую ошибку, когда анимация пытается запуститься:
Invalid prop: type check failed for prop "data". Expected Object, got Function
found in
---> <VueLottie>
Однако, когда я импортирую свой файл json, используя обычный импорт в своем компоненте, как показано ниже, он отлично работает и показывает анимацию:
import animationData from "/users/username/documents/projectname/public/data/filename.json";
Мои компоненты анимации настроены следующим образом:
<template>
<vue-lottie ref="lottie" loop autoplay :data="animationData" :height="400" :width="400"></vue-lottie>
</template>
<script>
import vueLottie from "vue-lottie-ssr";
import animationData from '/users/username/documents/projectname/public/data/filename.json'
export default {
name: 'animation',
components: {
vueLottie
},
data () {
return {
speed: 1,
animationData
}
},
computed: {
lottie () {
return this.$refs.lottie
}
}
}
</script>
Я также пытался получить файл JSON с помощью вызова axios при монтировании компонента, но возникает та же ошибка.
Обновить
Я обновил свой код, чтобы каждый компонент загружался лениво вместо файла JSON. Вот так:
components: {
WinAnimation: () => import("./WinAnimation.vue");
LoseAnimation: () => import("./LoseAnimation.vue");
}
Однако теперь я получаю следующую ошибку:
Unknown custom element: <win-animation> - did you register the component correctly? For recursive components, make sure to provide the "name" option.
Обновление 2
Я понял, почему я получаю сообщение об ошибке. Правильный способ состоял в том, чтобы добавить следующее вверху моего скрипта внутри родительского файла vue.
const winAnimation = () => import("./WinAnimation.vue");
const loseAnimation = () => import("./LoseAnimation.vue");
а затем внутри export default {...} я забыл добавить имена, поэтому:
components: { winAnimation, loseAnimation }
Теперь мой код был разделен, а размер файла app.js уменьшился почти вдвое! :)