У меня есть код, чтобы выдвинуть меню, которое работает:
Vue.set(this.filterStyles, filterIndex, {
display: "block",
height: "auto",
});
let filterValuesElHeight;
Vue.nextTick().then(() => {
let filterValuesEl = document.getElementById('parent-filter-values-' + filterIndex);
filterValuesElHeight = filterValuesEl.clientHeight;
Vue.set(this.filterStyles, filterIndex, {
height: 0,
display: "block"
});
return Vue.nextTick();
}).then(() => {
setTimeout(() => {
Vue.set(this.filterStyles, filterIndex, {
height: filterValuesElHeight + "px",
display: "block"
});
}, 10);
});
Первоначально меню настроено по следующим правилам:
display: none;
height: 0;
transition: all 500ms;
Первый Vue.set устанавливаетВысота до автоматического, поэтому точная высота может быть получена с помощью filterValuesEl.clientHeight
На следующем тике высота возвращается обратно к 0, а затем на последнем тике устанавливается ее естественная высота.
Тем не менее, кажется, что Vue.nextTick () недостаточно, хотя я заметил, что добавление очень маленького таймаута, кажется, делает эту работу.Это работает, но чувствует себя довольно грязно.Я надеялся, что у кого-то может быть лучшее решение?