Проверьте это демо ниже:
new Vue({
el: '#app',
data: {
flag: true
},
computed: {
style() {
let styleA = {
borderBottom: '1px solid red',
borderRight: '1px solid red'
};
let styleB = {
border: '1px solid green',
borderRight: '1px solid red'
}
return this.flag ? styleA : styleB
}
},
methods: {
changeStyle() {
this.flag = !this.flag;
}
}
})
.box {
width: 100px;
height: 100px;
}
<html>
<header>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
</header>
<body>
<div id="app">
<div class="box" :style="style"></div>
<button @click="changeStyle">changeStyle</button>
</div>
</body>
</html>
В этой демонстрации нажмите кнопку changeStyle
, чтобы переключить два разных стиля.
Вот шаг:
- Сначала
styleA
применяется с red borderBottom
и red borderRight
Нажмите кнопку changeStyle
, styleB
, ожидаются green border
и red borderRight
но отображается только green border
.
Нажмите кнопку changeStyle
еще раз, как мы видим, отображается только red borderBottom
, например red borderRight
просто исчезает.
Нажмите еще раз, вы никогда не увидите red borderRight
Что-то не так со сравнением виртуального узла и рендерингом в VUE
?