问题描述
因此,我是Vue的新手,正在检查一些课程,现在我学习了过渡课程。我从Vue官方转换中复制粘贴了下面的CSS代码,这是行不通的,但是仅淡出淡入就可以了。 另一个问题是v模型由于某种原因v-if根本无法工作。
<template>
<div class="main">
<h1>Animations!</h1>
<b-row>
<b-col>
<b-button @click="showAlert = !showAlert">Show Alert</b-button>
</b-col>
<b-col>
<b-alert variant="warning" v-model="showAlert" key="1">Wanrning!</b-alert><br>{{ showAlert }}
</b-col>
<b-col>
<transition name="fade" mode="out-in">
<b-alert variant="primary" v-model="showAlert" key="2">Animated Wanrning!</b-alert>
</transition>
</b-col>
</b-row>
</div>
</template>
<script>
export default {
data() {
return {
showAlert: true
}
}
}
</script>
<style>
.main{
text-align: center;
margin: auto;
}
.fade-enter-active,.fade-leave-active {
transition: opacity 1s;
}
.fade-enter,.fade-leave-to {
opacity: 0;
}
</style>
解决方法
尝试使用div
元素包装警报,并使用v-if
有条件地呈现警报:
<transition name="fade">
<div v-if="showAlert">
<b-alert variant="primary" v-model="showAlert" key="2">Animated Wanrning!</b-alert>
</div>
</transition>
选中此example
,之所以会这样,是因为<b-alert>
在未显示时已从DOM中删除。这样过渡就不会发挥出来。
您可以通过放下v-model
并使用v-if
并结合show
道具来解决此问题。
new Vue({
el: '#app',data() {
return {
showAlert: false
}
}
})
.fade-enter-active,.fade-leave-active {
transition: opacity 1s;
}
.fade-enter,.fade-leave-to {
opacity: 0;
}
<link href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://unpkg.com/[email protected]/dist/bootstrap-vue.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.11/vue.js"></script>
<script src="https://unpkg.com/[email protected]/dist/bootstrap-vue.js"></script>
<div id="app">
<b-btn @click="showAlert = !showAlert">Toggle Alert</b-btn>
<transition name="fade" mode="out-in">
<b-alert variant="primary" show v-if="showAlert">
Animated Wanrning!
</b-alert>
</transition>
</div>