是否可以像这样在v-if
块上使用style
?
<style lang="scss" v-if="pinkTheme">
.ac-textfield
{
background: hotpink;
}
</style>
我尝试了此操作,但它不起作用(v-if
指令被忽略)。我知道我可以这样做:
<div class="ac-textfield" v-style="{ background: pinkTheme ? 'hotpink' : false }"></div>
但是,如果我想使用pinkTheme
的值来调制多个样式,这将很快变得难以维护。现在,我正在使用CSS选择器来达到预期的效果:
<template>
<div class="ac-textfield" :class="{ pinkTheme }">
</div>
</template>
<style lang="scss">
.ac-textfield
{
//...
}
.ac-textfield.pink-theme
{
background: hotpink;
}
</style>
但是,我不太喜欢这种解决方案(我希望在主题之间实现更大的分离,并且希望浏览器一次只加载一个主题)。有什么方法可以使第一个代码块起作用?
答案 0 :(得分:1)
不能工作,因为scss
必须编译为css
-这是在构建时完成的。但是,v-if
仅在 运行时 处执行/解释。
将要进行的工作是在单个文件vue组件的style
部分中包含template
块,但是请注意,您只能在其中使用CSS,而不能使用SCSS。具有与每个组件实例一起呈现的明显缺点。
您使用条件CSS类的方法实际上是正确的方法,因此您一定要坚持使用。
答案 1 :(得分:0)
v-if用于条件html渲染,v-if接受应该返回true或false的getter函数。您不能在样式中使用v-if。