Ваша проблема не в том, что вычисляемые свойства вычисляются после цикла рендеринга, а в том, что вы используете вычисляемое свойство, которое пытается найти элемент, который еще не был отрисован.
В первом цикле рендеринга, компонент еще не визуализирован.Он перебирает finalImages
и пытается установить класс на основе вашего вычисляемого свойства.Поскольку ничего еще не было обработано, this.$refs
пусто.Попытка получить длину этого приведет к «Невозможно получить длину свойства неопределенной».Одним из решений будет не цикл по ссылкам, а цикл finalImages
, чтобы создать вычисляемое свойство.Я не уверен на 100%, если он пересчитает вычисленное свойство на основе this.$refs
, но есть только один способ выяснить это.
animateHooks() {
const refs = this.$refs.imageAnimate;
return this.finalImages.map((image, index) => {
const img = {
start: refs ? refs[i].offsetTop : 0,
end: refs ? (refs.offsetTop + refs[i].offsetHeight) : 0,
animated: false
};
return img;
});
}
Вы сможете получить доступ к $refs
один тик после начального рендеринга (например, внутри this.$nextTick(() => { ... });
), но это бесполезно для вычисляемого свойства.