Vue будет обнаруживать и применять переход только для некоторых условий. Пожалуйста, прочитайте Переход отдельных элементов / компонентов . Поэтому в этом случае я думаю, v-show
- наш лучший выбор.
Так что ваш шаблон должен выглядеть примерно так:
<div id="app">
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" data-toggle="dropdown">
Dropdown button
</button>
<transition name="menu">
<div class="dropdown-menu" v-show="show">
<a class="dropdown-item">Action</a>
<a class="dropdown-item">Another action</a>
<a class="dropdown-item">Something else here</a>
</div>
</transition>
</div>
</div>
Затем вы должны активировать переменную show
, когда Bootstrap показывает и скрывает выпадающий список. Вы можете сделать это, прослушав show.bs.dropdown
и hide.bs.dropdown
события:
let dropdown = $(this.$el).find('.dropdown')
let menu = $(this.$el).find('.dropdown-menu')
dropdown.on('show.bs.dropdown', () => {
this.show = true
})
dropdown.on('hide.bs.dropdown', () => {
menu.css('display', 'block') // This prevent element hide before animation
this.show = false
})
Живой пример
Примечание. В этом примере я использую margin-top
для создания анимации вместо transform
, поскольку Bootstrap уже используется top
и transform
для позиции раскрывающегося меню.