Я использую Vue. js и Laravel для своего проекта и недавно добавил две анимации, используя плагин с именем Lott ie. Каждая анимация является компонентом, и они оба используют отдельный файл 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 через вызов ax ios, когда компонент монтируется, но возникает та же ошибка.
Обновление
Я обновил свой код, чтобы каждый компонент Вместо файла 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");
, а затем внутри экспорта по умолчанию {...} Я забыл добавить имена, поэтому:
components: { winAnimation, loseAnimation }
Теперь мой код разделен и мое приложение. js размер файла уменьшился почти вдвое! :)